Проблема возникает, когда переменная, из которой был построен массив, первоначально была nil
."undefined method 'zero' for Nil: Class" when #sum the Array without Nils
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)
^~~~
Как я должен бороться с этим про Perly?
Или, может быть, он ждет некоторой лучшей реализации метода stdlib sum
или чего-нибудь еще?
UPD: inject
дает тот же:
p z.inject{ |i, j| i + j }
undefined method '+' for Nil (compile-time type is (Nil | Int32))