如果另一个值为零,如何返回值

时间:2014-12-11 07:23:46

标签: ruby

a = [3, 2, 7]
a[1] + a[2] # Result : 9
a[1] + a[7]
TypeError: nil can't be coerced into Fixnum
    from (irb):18:in `+'
    from (irb):18
    from C:/RailsInstaller/Ruby1.9.3/bin/irb:12:in `<main>'

如果[7]为零,如何返回[1]值?

3 个答案:

答案 0 :(得分:2)

其中一种方法是使用fetch默认值:

a = [3, 2, 7]
a.fetch(1, 0) + a.fetch(2, 0) # => 9
a.fetch(1, 0) + a.fetch(7, 0) # => 2

答案 1 :(得分:1)

您可以使用nil.to_i == 0

这一事实
a = [3, 2, 7]

a[1].to_i + a[2].to_i
#=> 5

a[1].to_i + a[7].to_i
#=> 2

当然,这仅适用于加法/减法和中性元素为0的其他操作。对于更通用的解决方案,您可以使用||设置默认值:

a = [3, 2, 7]

(a[1] || 1) * (a[2] || 1)
#=> 6

(a[1] || 1) * (a[7] || 1)
#=> 2

答案 2 :(得分:0)

有人提到了显而易见的事实:

a[1] + (7 < a.size ? a[7] : 0)

请注意,如果7 < a.sizea[7]nil,则会引发异常(好!)。相反,如果我们错误地将a[7] nil表示为a.size <= 7,那么错误nil的存在就会被取消。当然,nil出现在他们不属于的地方非常罕见。正确?