添加,如果不是零?

时间:2013-11-25 23:21:55

标签: ruby-on-rails ruby

如何为以下内容编写单行内容?

x = y + (z if != nil)

我尝试了一些不同的东西并进行了搜索,但似乎无法找到任何与此相关的东西。

我试过了:

x = y + z? z : 0

但这不起作用(语法?),即使它确实如此,也感觉很草率。

2 个答案:

答案 0 :(得分:12)

x = y + z.to_i

nil.to_i将返回0,因此您将不会添加任何内容。

答案 1 :(得分:5)

你的第二次尝试是试图用三元运算符检查z。这可能是一个更明显的零检查:

x = y + (z || 0)

只是为了好玩,说你想在添加之前检查所有值:

[1,2,nil,4,7,nil,23].map(&:to_i).inject(&:+) # => 37

更新

或者由@hirolau改进:(更干净,更快)

[1,2,nil,4,7,nil,23].compact.inject(&:+) # => 37

没有inject,这是我的基准比较(对于n = 1,000,000):

          user       system     total      real
compact:  0.520000   0.000000   0.520000   (0.516290)
to_i:     1.380000   0.000000   1.380000   (1.372772)