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