您好我正试图从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的语法:)
答案 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)
来乘以数组,你也可以省略扁平化。