【问题标题】:how and when are Ruby variables instantiated如何以及何时实例化 Ruby 变量
【发布时间】:2013-03-30 19:04:54
【问题描述】:

来自 Rails 控制台:

development environment (Rails 3.2.9)
1.9.2p320 :001 > defined?(kol)
 => nil 
1.9.2p320 :002 > if 1==2
1.9.2p320 :003?>   kol = 'mess'
1.9.2p320 :004?>   end
 => nil 
1.9.2p320 :005 > defined?(kol)
 => "local-variable" 
1.9.2p320 :006 > kol
 => nil 

我的问题是,为什么即使条件 (1==2) 失败,变量 kol 也会实例化为 nil

【问题讨论】:

  • irb 在局部变量方面的工作方式与解释器不同——请注意。

标签: ruby-on-rails ruby


【解决方案1】:

这与 Ruby 解释器读取代码的方式有关。

对变量的赋值不必执行; Ruby 解释器只需要看到变量存在于赋值的左侧。 (编程 Ruby 1.9 和 2.0)

a = "never used" if false
[99].each do |i|
  a = i # this sets the variable in the outer scope
end
a # => 99

“即使赋值并未实际执行,Ruby 解释器也会创建变量。” http://www.jacopretorius.net/2012/01/block-variable-scope-in-ruby.html

【讨论】:

    猜你喜欢
    • 2010-10-24
    • 2012-05-13
    • 2016-08-13
    • 2017-04-05
    • 2011-11-11
    • 2014-10-01
    • 2010-10-16
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多