【问题标题】:In ruby, is there any operator similar to ||= for the assignment: a = b if !b.nil?在 ruby​​ 中,是否有任何类似于 ||= 的运算符用于赋值:a = b if !b.nil?
【发布时间】:2012-01-28 23:01:54
【问题描述】:

正如标题所问,是否有运营商,或者一些时髦的班轮来做上述事情?

澄清一下,如果这是第一次引用 a,并且 bnil,则不应持续超过 b 的评估为零。

【问题讨论】:

  • 签名被移除,请参考FAQ。

标签: ruby operators


【解决方案1】:

为什么不:

a = b unless b.nil?

或:

b.nil? and a = b

它们不是可读的单行线吗?

【讨论】:

  • 我希望有一个可以在花括号内构造散列时使用的运算符,看起来我只需要分段构建一个。
  • 但重点是:你真的需要这样的操作员吗?恕我直言,反对这种做法可能有非常有效的论据:如果它可能不存在,你将如何在未来提及“a”?该运算符的语义会是可读且真正有用的吗?我真诚地怀疑这一点。
【解决方案2】:

在 ruby​​ 中,局部变量可以在没有分配给它们的行的情况下实际执行:

a #=> NameError ...
if false
  a = 1
end
a #=> nil

你的 sn-p 相当于

if !b.nil?
  a = b
end

如果 b 为 nil,则不执行赋值,从前面的示例中,这会将 a 的值设置为 nil。如果 b 不为零,则将 a 设置为 b 的值。所以这(有点奇怪)实际上是一样的

a = b

但前提是 a 尚不存在,因此这是一种非常容易出错的做事方式。不要这样做!

【讨论】:

    【解决方案3】:

    据我所知,没有运营商。您的回复已经是一行......如果您真的想要,您可以更改 if !除非。

    【讨论】:

    • hmm,现在如果我对 ruby​​ 语法有足够的了解,可以在数组的分配中做到这一点 =/ something = {a = b, c = d unless d.nil?; end} 不太好用
    • 你也不能这样做。您必须分段构建数组。
    • 同理:a = b if b or something = {:a => b, :c => d} if d
    • 是的,但是您不能像上面建议的那样在哈希中包含 if。至少,这就是我阅读上述评论的方式。
    猜你喜欢
    • 2016-03-29
    • 2015-04-09
    • 2015-11-14
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多