1

2 つの類似した文の動作は異なります。大丈夫ですか?

比較:

a = 123 unless defined? a
a # => nil

しかし...

unless defined? b
  b = 123
end
b # => 123
4

1 に答える 1

2

はい、これは正しい動作です。ローカル変数は、nil代入前に作成および初期化されます。だからこのコード

a = 123 unless defined? a
a # => nil

とほぼ同等です

a = nil
a = 123 unless defined? a # `a` is not undefined anymore.
a # => nil

別の例 (cこの行の前に が定義されていなくても、このコードは をスローしませんNameError)。

c = 2 unless c # => 2
于 2013-02-15T12:36:01.823 に答える