2011-11-11 10 views
5

可能性の重複:
Difference between “and” and && in Ruby?
Ruby: difference between || and 'or'Ruby's 'または' vs '||'

私は

私が fooが第1の値(どちらかになりたかった
foo = nil or 4 

を(このようなものを)このコードを持っていましたはnil)、またはデフォルトの4. irbでテストしたところ、出力は私が期待していたものでした。愚かな私、私はfooの値を後でチェックしなかった。しばらくすると、私はコード内のいくつかのエラーに気づき始めました。私はfooの値をirbに戻すまで問題を見つけませんでした。これは予想外のnilでした。

or||の話は何ですか?彼らは代わりに働くはずですか? ||の代わりにorを使用する際にいくつかの警告がありますか?

+0

私は質問は直接関連していることに合意し、近くに同じ答えを持っていますが、彼らは同じ質問ではありません。最初のものが 'または' vs '||'と 'と' vs '&&'を比較するために展開されていれば、それらが重複していたことに同意するでしょう。 – zzzzBov

+0

http://stackoverflow.com/questions/1434842/is-there-any-wisdom-behind-and-or-operators-in-ruby、http://stackoverflow.com/questions/3904888/why-andも参照してください。 - または - 異なる - in-rails、&c。 – jball

答えて

12

ここに問題があります。 or||より低い優先順位を持っています。だから、あなたの最初の文は

(x = nil) or 4 

表現の結果は(あなたはそれがirbで正しく動作していたと思った理由である)4であると評価されたが、=の場合よりも低い優先順位を持っているnilorのでxが割り当てられています。

||バージョンは、あなたが欲しいものを行います。

x = (nil || 4) 
2

orは(非常に)優先度が低くなります。 or前に実行される割り当てを意味 -

4

or||=両方よりも低い優先順位を有します。 ||は、=より高い優先順位を持ち、最初に実行されます。

関連する問題