Я пишу небольшой алгоритм Ruby, который выдает указанную выше ошибку только для значений, заканчивающихся «1», например «21», «31», «41».«nil не может быть принудительно в Fixnum» непредвиденная ошибка
success = []
(1..9_999_999).each do |num|
num_s = num.to_s.split("")
if num_s.inject(0){ |memo, val| memo += (1..val.to_i).inject(&:*) } == num
success << []
end
end
Что странно, что нет никаких ошибок для основной строки кода само по себе:
["2", "1"].inject(0){ |memo, val| memo += (1..val.to_i).inject(&:*) } #-> 3
Основываясь на ошибки, я думал, что может быть что-то проблематично с выполнением:
(1.."1".to_i).inject(&:*) #-> 1
Но нет ... Я в замешательстве.
Почему вы используете 'memo + = ...' вместо 'memo + ...'? –
Из-за незнания :). Спасибо, я всегда делал + =, * = и т. Д. – rfish26535