помочь с простым методом - PullRequest
1 голос
/ 15 ноября 2010

Привет, я пытаюсь решить упражнение из https://github.com/alexch/learn_ruby

Я должен написать метод, который должен «умножать два числа» и «умножать массив чисел». Я новичок в ruby ​​и решил это, используя только один метод, подобный этому:

  def multi(*l)
    sum = 1
    l.flatten! if l.is_a? Array
    l.each{|i| sum = sum*i}
    return sum
  end

Я уверен, что есть лучшие способы, так как я могу улучшить этот метод? в более рубиновый синтаксис:)

1 Ответ

4 голосов
/ 15 ноября 2010

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) для умножениямассив, вы также можете опустить выравнивание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...