【发布时间】:2011-06-05 23:21:26
【问题描述】:
是否有一个 Ruby 运算符与 C# 的 ?? 运算符做同样的事情?
?? 运算符返回左手 操作数如果它不为空,否则它 返回右操作数。
【问题讨论】:
标签: c# ruby null-coalescing-operator
是否有一个 Ruby 运算符与 C# 的 ?? 运算符做同样的事情?
?? 运算符返回左手 操作数如果它不为空,否则它 返回右操作数。
【问题讨论】:
标签: c# ruby null-coalescing-operator
操作员的名字是null-coalescing operator。我链接到的原始博客文章涵盖了语言之间空值合并的差异已被删除。可以在 here 找到 C# 和 Ruby 空合并之间的更新比较。
简而言之,你可以使用||,如:
a_or_b = (a || b)
【讨论】:
如果你不介意合并 false,你可以使用 ||运营商:
a = b || c
如果 false 可以是有效值,您可以这样做:
a = b.nil? ? c : b
检查b是否为nil,如果是,则为a分配c的值,如果不是,则为b。
【讨论】:
a = b or c; puts a。惊喜,惊喜,在我的 ruby 1.8.6 中,它打印了 b 的值。原因是or的优先级低于=
or 不是布尔运算符,而是 ruby 中的控制流运算符:devblog.avdi.org/2010/08/02/using-and-and-or-in-ruby
b 是一种方法(即它被调用两次),第二个 sn-p 可能会产生副作用。
请注意,Ruby 具有将通常的空值合并到 [] 或 0 或 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|
【讨论】:
[*x].each do |y|。