なぜこれら2つの文は等価ではありませんか? defined? foo ? foo << "bar" : foo = ["bar"]
Ruby三項演算子
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に相当するはずです)。ネイティブルビ1.9.1と少し違った動作をします:文#1は、それを2回実行しても決してfoo
を定義しません。
ありがとう、私はそれを考えていたはずです! – dbyrne
"なぜnilが返されないのですか?私は手がかりがありません。":irbコンソールで "foo?foo <<" bar ":foo = [" bar "]という質問の最初の行に入力すると、 "式"を得て、 "無し"にしないでください。質問者の間違いがあったと思います。 –
@Mörre使用しているルビのバージョンによって異なります。 Ruby 1.9を使用している可能性があります。 – dbyrne