||
や&&
などのブール演算子は、最後に評価された文を返します。
たとえば、puts "hi" && "no"
上記「ノー」の両方の文字列が「truthy」と呼ばれる「ノー」だった最後の値と見なされるので、印刷します。
この場合、プログラマは||
演算子の短絡特性を利用しています。だから、別の例として、
puts "hi" || "no"
上記の意志を出力「HI」以来、「HI」truthyとみなされ、または短絡されている「HI」という表現から呼び出すと返される最後の値となりました。
ルビーでは、この種の構造が多く見られます。特に、if
があります。
a = if true
"A will be set to this string"
else
"This will never happen"
end
puts a #=> A will be set to this string
編集:ニックが述べたように、それだけでnil
とfalse
が「falsy」として扱われることに注意することが重要です。 「HI」
a = Object.new || "hi"
puts a #=> <Object:0x10832420>
この場合
(とについて評価し、返さ(及びその後に譲渡された)されたように、第1の引数は「falsy」であるこれら2つの場合において
a = nil || "hi"
puts a #=> "hi"
a = false || "hi"
puts a #=> "hi"
興味深い例最初の引数としての他の値)Object.newは "true"なので、 "hi"は決して評価されません。あなたの特定の例では、作者は存在の有無をテストする可能性が最も高いです(ゼロでない)session[:return_to]
です。これは非常に便利ですが、false
が有効な値であれば正しく動作しない可能性があります。
接線のビットが、私は( 'or'オペレータは、このような状況では、より「正しい」だろうと感じhttp://avdi.org/devblog/2010/08/02/using-and-and-or -in-ruby /)である。質問に答えないが、私はそれをそこに置くと思った。 – Karl