30

可能重复:
C# ?? Ruby 中的运算符?

是否有与 C# 执行相同操作的 Ruby 运算符操作员?

?? _ 运算符如果不为空则返回左操作数,否则返回右操作数。

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

4

3 回答 3

38

运算符的名称是null-coalescing operator。我链接到的原始博客文章涵盖了语言之间空值合并的差异已被删除。可以在此处找到 C# 和 Ruby 空值合并之间的更新比较。

简而言之,您可以使用||,如:

a_or_b = (a || b)
于 2011-01-09T03:55:02.487 回答
16

如果你不介意合并 false,你可以使用 || 操作员:

a = b || c

如果 false 可以是有效值,您可以执行以下操作:

a = b.nil? ? c : b

其中 b 被检查为 nil,如果是,则为 a 分配 c 的值,如果不是,则为 b。

于 2011-01-09T04:05:07.740 回答
5

请注意,Ruby 具有将通常的 null 合并到[]or0或的特定功能0.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|
于 2011-01-09T04:36:22.457 回答