爲什麼這兩個語句不等價?Ruby三元運算符
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
。
謝謝,我應該想到的! – dbyrne
「爲什麼這會返回零,我不知道..」:當我在IRB控制檯I中輸入問題「defined?foo?foo <<」bar「:foo = [」bar「]」的第一行時得到「表達」而不是「無」。我認爲提問者犯了一個錯誤。 –
@Mörre它取決於你使用的是什麼版本的ruby。你可能正在使用紅寶石1.9。 – dbyrne