下面的代码工作正常:
class String
def foo
next!
end
end
puts 'hh'.foo # hi
这个也很好用:
class String
def foo
self.next
end
end
puts 'hh'.foo # hi
但这个不是:
class String
def bar
next
end
end
# Invalid next (SyntaxError)
为什么 Ruby 在此处使用 next
关键字并引发 SyntaxError,即使我正在处理 String
类?
最佳答案
对于前两个示例,Ruby 解析器确定您正在调用方法,因为不能那样使用 next
关键字。
对于第三个示例,看起来您正在使用 the next
keyword而不是调用方法。解析器在此阶段无法知道您实际上是要调用 next
方法(可能存在也可能不存在)。
因此,您必须引导解析器避免这些歧义。您可以像在第二个示例中那样使用显式接收器,也可以使用 send(:next)
等结构来代替
关于ruby - 为什么 Ruby 中的 `next` 方法会引发 SyntaxError 而 `next!` 或 `self.next` 不会在猴子修补 String 类时引发语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54308569/