默认值与关键字参数

时间:2016-04-02 01:01:23

标签: ruby

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

默认值

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.0期待已久的功能

2 个答案:

答案 0 :(得分:3)

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

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

test1
test2

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

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

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

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

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

答案 1 :(得分:1)

除了给定的答案之外,如果是关键字参数,您可以按不同的顺序使用它们,而默认参数必须按照它们已定义的顺序使用。

相关问题