以下代码工作正常:
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
关键字不能以这种方式使用。
在第三个示例中,看起来您使用的是 next
关键字而不是调用方法。解析器在此阶段无法知道您实际上是要调用next
方法(可能存在也可能不存在)。
因此,您必须指导解析器避免这些歧义。您可以像第二个示例中那样使用显式接收器,也可以改用 send(:next)
等构造