6
p b #undefined local variable or method b for main:Object
a = nil
if a and (b=3)
  do_something_with b
end
p b # nil

なぜ bnilは if ブロックの実行後に値を取得するのに、予想される結果は になる undefined local variable or method b for main:Objectのですか?Ruby はnil事前にすべての変数をメモリに初期化しますか?

次のコードと同じケース

if nil
  bb = 10
end
p bb # nil

誰かがルビーが変数を初期化する方法と、この場合に何が起こっているのかについて光を当ててください、ありがとう

4

1 に答える 1

6

「[ローカル変数] は、式が実際に実行されなくても、代入式の左側 (等号 (U+003D) の前) にある場合、初期化されます。後者の種類の変数は値 nil を持ちます。 "

編集: この回答はかなり優れた Ruby リファレンスを指していましたが、明らかにマルウェア サイトに置き換えられました。リンクは削除しましたが、回答の引用は保持しています。

于 2013-03-06T06:42:52.170 に答える