0

重複の可能性:
条件文とrubyでの値の割り当て

いくつかのrailsコードをリファクタリングしているときに、rubyで構文がおかしくなったことがあります。

次の方法を考えると

def get_value
  42
end

なぜこれが機能するのですか?

if value = get_value
  puts value
end

これはしませんが?

puts value if value = get_value

後者はエラーを出します:undefined local variable or method `value' for main:Object (NameError)。これらの表現は等しいと思いましたか?putsの前にif-blockを評価する場合は、value未定義にしないでください。

4

1 に答える 1

4

これは、実行時間に対する行の解析によるものです。最初のバージョンでは、値が解析および設定されてから、プットが評価されます。2行目では、パーサーが変数に到達したときputs value、それはまだ定義されていません。つまり、最初に行を解析するまで、行を実行して変数を設定することはできません。

于 2012-07-25T12:34:46.547 に答える