如何使方法采用一个或两个参数?

时间:2014-05-16 01:56:47

标签: ruby methods arguments

我正在进行一项练习,以便通过以下测试:

  describe "repeat" do
    it "should repeat" do
      repeat("hello").should == "hello hello"
    end

    # Wait a second! How can you make the "repeat" method
    # take one *or* two arguments?
    #
    # Hint: *default values*
    it "should repeat a number of times" do
      repeat("hello", 3).should == "hello hello hello"
    end
  end

由于某种原因,我不理解这一部分。

当我使用它时:

def repeat(z)
    return z + " " + z
end

测试的第一部分通过,但第二部分失败。

然后当我尝试这个时:

def repeat(z, 2)
    return z * 2
end

我退出测试/耙时出错。

然后当我尝试:

f = 2
def repeat(z, f)
    return z * f
end

测试没有通过,我收到了这条消息:

wrong number of arguments (1 for 2)

我不知道这里发生了什么,有人能解释一下这是怎么回事吗?

2 个答案:

答案 0 :(得分:3)

您可以定义如下函数:

def repeat(z, y=2)
    return z * y
end

现在,repeat("hello")会产生:hellohellorepeat("hello", 3)将返回hellohellohello

答案 1 :(得分:2)

看来你正在做Simon说的练习。

本练习的目的是教你如何使用默认值获取一个或多个参数。

每当使用" x =默认值"分配默认值时,将使用它。如果使用不同的值调用该方法,则将使用它。

在下面的示例中,number的默认值为2.

    def repeat(word, number = 2)
        ([word] * number).join(" ")
    end

使用上面的内容,我们可以调用repeat(" Hello",3),这将导致"你好你好你好"

如果我们调用repeat(" Hello"),默认情况下它将返回" hello hello"

希望这有帮助!!!