ruby - 为什么 Ruby 中的 `next` 方法会引发 SyntaxError 而 `next!` 或 `self.next` 不会在猴子修补 String 类时引发语法错误?

标签 ruby

下面的代码工作正常:

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/

相关文章:

ruby - Rails 4 - config.ssl_options 不起作用

ruby - 嵌套类如何访问 Ruby 外部类中的方法?

javascript - 如何防止 jQuery onclick 事件中的 Ruby 方法在页面刷新时执行

ruby - 如何验证 "puts"是否已使用特定消息调用?

Python打印环境变量内存地址

ruby - 这在 Ruby 语言中是什么意思?

ruby - 如何复制具有预签名 URL 的对象?

ruby-on-rails - Ruby Enterprise Edition 与 Ruby 1.9.2 内存改进

ruby - 猴子修补 : Does define_method take precedence over bind?

ruby - 使用 EB deploy 管理多个 AWS 账户