为什么 Ruby 中的 'next' 方法会引发 SyntaxError,而 'next!' 或 'self.next' 在猴子修补 String 类时却没有?



以下代码工作正常:

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) 等构造

最新更新