Ruby 的 "foo = true if !defined? foo"不会按预期工作

标签 ruby

当它实际上没有被定义时,它得到值 nil 只是因为它被“触摸”了:

$ irb

ruby-1.9.2-p0 > foo = true if !defined? foo
 => nil 
ruby-1.9.2-p0 > foo
 => nil 

ruby-1.9.2-p0 > if !defined? bar
ruby-1.9.2-p0 ?>  bar = true
ruby-1.9.2-p0 ?>  end
 => true 
ruby-1.9.2-p0 > bar
 => true 

所以 if ... end 按预期工作,但 foo = true if ... 没有。

最佳答案

Ruby 在执行包含赋值的行之前定义了一个局部变量,因此 defined?(foo) 对于单行代码将始终为 true

另一个例子显示局部变量是在行的任何部分执行之前定义的:

defined? foo # => false
foo = foo    # => foo is now nil

关于Ruby 的 "foo = true if !defined? foo"不会按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3775402/

相关文章:

ruby-on-rails - 守护进程生成 : gem_original_require : no such file to load --daemon-spawn (Load Error)

ruby-on-rails - Google Apps 和 Rails 中的 Open ID 身份验证 - 安全性

ruby-on-rails - elasticsearch 与破折号完全匹配

ruby-on-rails - 如何在不实例化 Ruby 中的 A 对象的情况下确定类 A 是否继承自类 B?

c - 如何在 Ruby 扩展中链接 C 库

带循环的 ruby​​ here-doc

javascript - 在 HTML 中传递 javascript 选项

ruby-on-rails - Ruby on Rails 指南

ruby - 通过启动多个进程而不是使用线程来扩展 ruby​​ 脚本

ruby - 在加载时执行类中包含的模块中的代码(而不是在初始化时)