以下代码可以正常工作:
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)
即使我正在研究next
类,为什么Ruby为什么在这里使用String
关键字并引发SyntaxError?
答案 0 :(得分:7)
在前两个示例中,Ruby解析器确定您正在调用方法,因为无法使用next
关键字。
在您的第三个示例中,您似乎正在使用the next
keyword而不是调用方法。在这个阶段,解析器无法知道您实际上是要调用next
方法(该方法可能存在或可能不存在)。
因此,您必须引导解析器避免这些歧义。您可以使用第二个示例中的显式接收器,也可以使用send(:next)
之类的构造