如何为以下内容编写单行内容?
x = y + (z if != nil)
我尝试了一些不同的东西并进行了搜索,但似乎无法找到任何与此相关的东西。
我试过了:
x = y + z? z : 0
但这不起作用(语法?),即使它确实如此,也感觉很草率。
答案 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)