4

||演算子の使用とrescueRuby での使用に違いはありますか?

言う:

b = A.value || "5"

b = A.value rescue 5

オブジェクトにはメソッドAがありませんvalue

4

3 に答える 3

9

||ブール値または演算子です (Ruby では、値のみがブール値のコンテキストで false に評価されることに注意してください) nil:false

nil || 5
# => 5

false || 5
# => 5

4 || 5
# => 4

rescue例外キャッチ用です:

fail 'bang' rescue 5
# => 5

'bang' rescue 5
# => "bang"

nil rescue 5
# => nil

あなたの例では、にA応答しないことを考えるとvalue

A.value
# NoMethodError: undefined method `value' ...

b = A.value || 5
# NoMethodError: ...
b
# => nil

b = A.value rescue 5
b
# => 5

A.value今、それが返すと仮定しますnil:

A.value
# => nil

b = A.value || 5
b
# => 5

b = A.value rescue 5
b
# => nil
于 2013-06-11T08:04:54.430 に答える
2

他の人がすでにあなたに言ったこととは別に、もう 1 つの違いは、それが正直||オペレーターであるのに対し、インラインは救助にrescue等しいことです。言い換えれば、インラインは下品なハックであり、本番コードで頻繁に使用するべきではありません。代わりに身なりのよいステートメントを使用してください。StandardErrorrescuebegin ... rescue ... else ... ensure ... end

于 2013-06-11T09:52:53.837 に答える