【发布时间】:2011-07-12 00:26:11
【问题描述】:
为什么这两个语句不等价?
defined? foo ? foo << "bar" : foo = ["bar"]if (defined? foo) then foo << "bar" else foo = ["bar"] end
第一句话:
irb(main):001:0> defined? foo ? foo << "bar" : foo = ["bar"]
=> nil
irb(main):002:0> foo
=> nil
irb(main):003:0> defined? foo ? foo << "bar" : foo = ["bar"]
=> "expression"
irb(main):004:0> foo
=> ["bar"]
第二句话:
irb(main):001:0> if (defined? foo) then foo << "bar" else foo = ["bar"] end
=> ["bar"]
irb(main):002:0> foo
=> ["bar"]
irb(main):003:0> if (defined? foo) then foo << "bar" else foo = ["bar"] end
=> ["bar", "bar"]
irb(main):004:0> foo
=> ["bar", "bar"]
这些会话使用 JRuby 1.5.0(应该等同于原生 Ruby 1.8.7)。我看到原生 ruby 1.9.1 的行为略有不同:语句 #1 从未定义 foo,即使运行两次也是如此。
【问题讨论】:
标签: ruby jruby ternary-operator