将nil强制转换为数字

eas*_*fri 3 ruby coercion

这里发生了什么?

irb(main):001:0> a= nil
=> nil
irb(main):002:0> b = nil
=> nil
irb(main):003:0> a
=> nil
irb(main):004:0> a+b
NoMethodError: undefined method `+' for nil:NilClass
    from (irb):4
    from :0
irb(main):005:0> if a.nil? or b.nil?; a,b=0;end;
irb(main):006:0* c = a+b
TypeError: nil can't be coerced into Fixnum
    from (irb):6:in `+'
    from (irb):6
    from :0
irb(main):007:0>
Run Code Online (Sandbox Code Playgroud)

如何通过将nil转换为数字来安全地执行算术?

gio*_*ian 5

根据为什么有nil而不是数字,你可以决定将nil视为0对你有好处; 在这种情况下,您可以执行以下操作:

c = (a || 0) + (b || 0)
Run Code Online (Sandbox Code Playgroud)

当然,这只有在你知道为什么你有一个零而不是一个数字时才有意义......