ruby - 关于方法中变量引用的简单 Ruby 难题

标签 ruby

为什么这个方法返回 1 而不是死于无限递归?

def foo
  foo ||= 1
end

foo # => 1

按照以下方式重写它确实死了:

def foo
  foo.nil? ? 1 : foo
end

最佳答案

在第一种情况下,foo ||= 1 指的是一个局部变量。当你对裸字赋值时,Ruby 总是创建一个局部变量,这就是为什么你必须编写 self.foo = ... 如果你想调用定义为 def foo 的编写器方法=(值)||= 运算符毕竟只是一个奇特的赋值运算符。

在第二种情况下,没有赋值,所以当它命中 foo.nil? 时,Ruby 将裸词 foo 解释为方法调用,然后爆炸。

关于ruby - 关于方法中变量引用的简单 Ruby 难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12734258/

相关文章:

ruby-on-rails - 如何显示路径在我的 Ruby on Rails 项目目录之外的图像

ruby - 创建 puppet 包提供程序 - "No command service defined for provider"

ruby - 错误消息中引用了两个不同版本的 ruby​​?

ruby - rspec - 如何与预期中的实际 DateTime 进行比较?

ruby-on-rails - 'array.map' 是否保留原始顺序?

ruby-on-rails - 如何解决 NotIdentifiedByImageMagickError?

ruby - 我可以从 Ruby 中的系统调用中获得连续输出吗?

ruby - 如何在 Chef/Ruby 执行命令中使用变量?

ruby-on-rails - ruby 版本中的 p180 是什么?

ruby - 如何在 Octopress 中仅生成新帖子?