【发布时间】:2013-02-24 20:00:39
【问题描述】:
我不完全理解 Ruby 2.0 中的命名参数是如何工作的。
def test(var1, var2, var3)
puts "#{var1} #{var2} #{var3}"
end
test(var3:"var3-new", var1: 1111, var2: 2222) #wrong number of arguments (1 for 3) (ArgumentError)
它被视为哈希。这很有趣,因为要在 Ruby 2.0 中使用命名参数,我必须为它们设置默认值:
def test(var1: "var1", var2: "var2", var3: "var3")
puts "#{var1} #{var2} #{var3}"
end
test(var3:"var3-new", var1: 1111, var2: 2222) # ok => 1111 2222 var3-new
这与 Ruby 之前使用默认参数值的行为非常相似:
def test(var1="var1", var2="var2", var3="var3")
puts "#{var1} #{var2} #{var3}"
end
test(var3:"var3-new", var1: 1111, var2: 2222) # ok but ... {:var3=>"var3-new", :var1=>1111, :var2=>2222} var2 var3
我知道为什么会发生这种情况以及它是如何工作的。
但我只是好奇,必须如果我使用命名参数,我必须为参数使用默认值吗?
那么,谁能告诉我这两者有什么区别?
def test1(var1="default value123")
#.......
end
def test1(var1:"default value123")
#.......
end
【问题讨论】:
-
第一个有可选参数。最后一个有命名参数。所以你可以省略两者的参数,但是如果你想传入一个参数,最后一个需要命名。
-
No named parameters in Ruby? 的可能重复项
-
第一个例子没有使用命名参数
-
不是重复的 stackoverflow.com/questions/9612499/no-named-parameters-in-ruby 是关于 Ruby 1
-
从 ruby 2.1 开始你不需要给出默认值