if l.is_a? Array
не является необходимым, поскольку способ multi
является определением, l
всегда будет массивом.
Шаблон
result = starting_value
xs.each {|x| result = result op x}
result
можно записать более краткоиспользуя xs.inject(starting_value, :op)
.
Таким образом, вы можете написать свой код следующим образом:
def multi(*l)
l.flatten.inject(1, :*)
end
Если вы в порядке, вызовите метод как multi(*array)
вместо multi(array)
для умножениямассив, вы также можете опустить выравнивание.