変数の定義に好奇心があります。私は変数の定義について知っています、それはそれがどのように機能するかを理解することだけです。定義されていない場合は、myvarを0に設定するという考え方です。falseはfalseまたはnilによって返される可能性があるため、falseは使用しません。
def foo
myvar=1000
myvar = ((defined? myvar)==nil) ? 0 : myvar
puts myvar
end
foo # => 1000
しかし
def foo
# myvar=1000
myvar = ((defined? myvar)==nil) ? 0 : myvar
puts myvar
end
foo # => nil
しかし
def foo
mybool = ((defined? myvar)==nil)
myvar = mybool ? 0 : myvar
puts myvar
end
foo # => 0 it rocks !
これは、最終テストが評価される前にブールテストがmyvarに影響を受けた場合のようなものです。
((defined? myvar)==nil)
2つの可能性を定義しますか?myvarは可能性がありnil
、テストの右側はnil
可能性がありますnil
(それはnil
)。
このテストのnil部分を取り除くために、私はこのコードを試しました:
def foo
mylocalvariable = 2 # it gives 'local-variable' and not nil
puts ((defined? myvar) == (defined? mylocalvariable ))
myvar = ((defined? myvar)!=(defined? mylocalvariable )) ? 0 : myvar
puts myvar
end
foo # => nil
テストの最初の部分はmyvarの影響を受けたようですが、代入演算子は()または比較演算子の後にあります。アイデアはありますか?他のコードは必要ありませんが、なぜそのように機能するのですか。ありがとうございました。