【问题标题】:Ruby's equivalent to C#'s ?? operator [duplicate]Ruby 相当于 C# 的 ??运算符 [重复]
【发布时间】:2011-06-05 23:21:26
【问题描述】:

可能重复:
C# ?? operator in Ruby?

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

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

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

【问题讨论】:

    标签: c# ruby null-coalescing-operator


    【解决方案1】:

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

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

    a_or_b = (a || b)
    

    【讨论】:

    • 链接已失效。
    • 这实际上是一个“falsy-coalescing operator”。
    • 链接又是404
    • 这不是一回事。不适用于其他虚假值的布尔值..
    • @Cristik 谢谢,希望这是最后一次更新链接
    【解决方案2】:

    如果你不介意合并 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 可能会产生副作用。
    【解决方案3】:

    请注意,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|
    

    【讨论】:

    • 你也会经常看到[*x].each do |y|
    猜你喜欢
    • 2011-03-11
    • 2011-07-11
    • 2011-06-27
    • 2014-03-27
    • 1970-01-01
    • 2013-01-10
    • 2012-04-23
    • 2012-11-06
    • 1970-01-01
    相关资源
    最近更新 更多