帮助一个简单的方法

时间:2010-11-15 18:34:59

标签: ruby

您好我正试图从https://github.com/alexch/learn_ruby

解决这个问题

我必须写一个方法,它应该“乘以两个数字”和“乘以一个数字数组”。我很新鲜的红宝石并解决了它,只有这样一种方法:

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

我确信有更好的方法,那么我该如何改进这种方法呢?更像ruby的语法:)

1 个答案:

答案 0 :(得分:4)

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)来乘以数组,你也可以省略扁平化。