2011-01-09 10 views

答えて

25

からオペレータの名前は、null-coalescing operatorあります。私がリンクしている元のブログ記事は、言語間のヌル合体の違いを取り上げたものです。 C#とRubyのヌル合体のより新しい比較はhereで見つけることができます。要するに

、あなたはのように、||を使用することができます。

a_or_b = (a || b) 
+0

リンクは現在停止しています。 – orourkedd

+0

@orourkeddありがとう、私は新しいリンクでそれを少し修正しました。 –

+2

これは実際には "偽の合体演算子"です。 – Kelvin

12

あなたが偽合体気にしない場合は、使用することができます||オペレータ:

a = b || c 

偽が有効な値にすることができた場合は、あなたが行うことができます:

bはゼロのためにチェックされ、それがある場合、aはcの値が割り当てられ、場合
a = b.nil? ? c : b 

ない、b。

+0

私は 'a = b or c;を試しました。 'を置く。サプライズ、驚き、私のルビー1.8.6で、それはbの値を表示します。その理由は、 'または'が '= ' – Shuo

+0

'または 'boolean演算子ではなく、ルビの制御フロー演算子であるよりも優先順位が低いということです。http://devblog.avdi.org/2010/08/02/using-and -and-in-ruby/ – orourkedd

+0

残念ながら、 'b'がメソッド(つまり、2度呼ばれている)であれば、2番目のスニペットは副作用を起こす可能性があります。 – Kelvin

3

Rubyには、通常のヌル統合で具体的な機能があり、[]または0または0.0になることに注意してください。

(x || []).each do |y| 
:( NilClassがそれらを実装しているため)

代わりの

x = y || [] # or... 
x = y || 0 

は...あなただけの

x = y.to_a # => [] or .. 
x = y.to_i # or .to_f, => 0 

これは、のような特定の一般的なデザインパターンを作る...行うことができます

...少し見栄えがいいよ:

x.to_a.each do |y| 
+1

また、 '[* x] .each do | y |'と表示されることがよくあります。 –

関連する問題