当构建数组的变量nil
最初是 a 时,就会出现问题。
y = (1..2).map do
v = nil
v = 1
v
end
p y # => [1, 1]
p y.class # => Array(Int32)
p y.sum # => 2
当v
停止处于nil
某个条件时,这可能是计算的并且在编译时无法解决:
z = (1..2).map do
v = nil
v = 1 if true
v
end
p z # [1, 1]
p z.class # => Array(Nil | Int32)
数组得到更复杂的类型,与当前sum
实现不兼容,因此p z.sum
会导致编译时错误:
undefined method 'zero' for Nil:Class (compile-time type is (Nil | Int32):Class)
def sum(initial = T.zero)
^~~~
我该如何正确应对?
或者它可能等待 stdlibsum
方法或其他任何更好的实现?
UPD:inject
给出相同的:
p z.inject{ |i, j| i + j }
undefined method '+' for Nil (compile-time type is (Nil | Int32))