默认值与关键字参数

有人可以解释一下使用参数的默认值和使用关键字参数之间的区别吗?

默认值

def test1(var1, var2="2", var3=3) puts "#{var1} #{var2} #{var3}" end test1(1) # => 1 2 3 test1(1, "2", 3) # => 1 2 3 

关键字参数

 def test2(var1, var2: "2", var3: 3) puts "#{var1} #{var2} #{var3}" end test2(1) # => 1 2 3 test2(1, "2", 3) # => 1 2 3 

我看不出它们之间有什么区别,但我觉得我错过了一些东西,因为我读过关键词论证是一个期待已久的ruby 2.0function

方法体看起来非常相似,但主要区别在于如何调用方法。

这两种方法都可以不带参数调用,因为你指定了默认值,所以调用方法的代码可能如下所示:

 test1 test2 

但是如果要在调用方法时覆盖默认值,并将var1设置为"foo" ,则需要编写如下内容:

 test1("foo") test2(var1: "foo") 

上面调用test2的行是语法糖:

 test2({:var1 => "foo"}) 

要更改关键字参数,必须将哈希作为最后一个参数传递,并且其中一个哈希键必须是关键字参数的名称作为Ruby符号。 关键字参数的一个好处是你永远不必记住需要指定参数的顺序。

除了给定的答案,在关键字参数的情况下,您可以以不同的顺序使用它们,而默认参数必须按照它们已定义的顺序使用。