Ruby的等价于C#的??运营商

问题描述:

可能重复:
C# ?? operator in Ruby?Ruby的等价于C#的??运营商

是否有一个Ruby运算符做同样的事情为C#的运营商?

The ??如果操作数不为空,则返回左侧的 操作数,否则返回右侧操作数。

http://msdn.microsoft.com/en-us/library/ms173224.aspx

运营商的名称是null-coalescing operator。我所链接的原始博客文章涵盖了语言之间空合并的差异,已被取消。 C#和Ruby null合并的新比较可以在here找到。

总之,你可以使用||,如:

a_or_b = (a || b) 
+0

链接现已停止。 – orourkedd 2014-02-13 13:22:53

+0

@orourkedd谢谢,我用一个新的链接重新编写了一下。 – 2014-02-13 13:55:12

+2

这实际上是一个“falsy-coalescing操作符”。 – Kelvin 2015-07-23 21:56:25

如果你不介意的合并假的,你可以使用||运营商:

a = b || c 

如果设置为false可以是一个有效的值,你可以这样做:

a = b.nil? ? c : b 

其中B是检查零,如果是,被分配c的值,如果不,b。

请注意,Ruby具有通常的空合并到[]00.0的特定功能。

而不是

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

...你可以(因为NilClass实现他们)只是做...

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

这使得某些常见的设计模式,如:

(x || []).each do |y| 

...看起来好一点:

x.to_a.each do |y|