2015-09-10 70 views
1

作为我所测试的第一个ruby课程的一部分,我需要做一个基本的乘法方法,首先接受2个参数并乘以它们,但在rspec之后测试用相同的方法将几个数字相乘。红宝石“乘法”功能策略

我只是想我的假设的确认,因为红宝石犯规支持方法重载,我将不得不只让我一个乘法函数接受一个数组,并做到以下几点:

def multiply(arr) 
    total = 0 
    arr.each do |x| total *= x end 
    return total 
end 

有人可以提供一些在这里启发最佳策略?我已经对了吗?这里是RSpec的:

describe "#multiply" do 

    it "multiplies two numbers" do 
    multiply(3,9).should == 27 
    end 

    it "multiplies several numbers" do 
    multiply([1,2,3,4]).should === 24 
    end 
end 
+1

不文档做这样的,但我最近访问这个资源:[RubyMonk:方法(HTTP ://rubymonk.com/learning/books/1-ruby-primer/chapters/19-ruby-methods/lessons/69-new-lesson)。最后一部分是一个加减计算器 - 可能对您有用。基本上,你想看'*参数',其中'*'表示“未知数量的参数” – onebree

+1

您需要从'total = 1'开始 – iamnotmaynard

+0

这会创建一个方法'Object#multiply'('method(:multiply ).owner => Object')。你确定这是被问到的吗?难道你希望创建一个实例方法'Array#multiply'?那将是'class Array; def multiply; self.reduce(:*);结束; end'。然后'[1,2,3] .multiply#=> 6; [1,2,3.2] .multiply#=> 6.4'。 –

回答

3

最简单的将是尽可能实现multiply而言

def multiply(*numbers) 
    numbers.reduce(:*) 
end 

p multiply(10,2) 
p multiply(10,2,3) 
+0

谢谢!我找到了一个很好的解释,说明为什么在这里工作:http://www.sitepoint.com/guide-ruby-collections-iii-enumerable-enumerator/ – studentck