1

Ruby では、なぜ次のように書けるのでしょうか。

# b is not defined yet.
#
if b = true
  a = b
end
# => a = true

しかし、ワンライナーではありません:

a = b if b = true
# => NameError: undefined local variable or method `b' for main:Object
4

1 に答える 1

4

Ruby インタープリターは、割り当てを認識したときにローカル変数を「作成」するためです。

2 番目のケースでは、代入がまだ確認されていないため、式が解析されるときに変数は存在しません。

より正確に言うと、メソッドは最初に内部表現に解析され、その後おそらくコードが呼び出されて実際に実行されます。

変数は、その解析パスで「作成」されます。それは実際には宣言の問題であり、通訳者がそれらを認識するようになることを意味します。周囲のメソッドが誰かによって呼び出されるまで、スペースや値が与えられたという意味では作成されません。

于 2012-11-21T17:00:45.807 に答える