我不完全理解Ruby2.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)就像哈希一样。这很有趣,因为要在Ruby2.0i中使用命名参数,必须为它们设置默认值:
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发布于 2013-03-09 10:27:56
你发布的最后一个例子具有误导性。我不同意这种行为与以前的行为相似的观点。最后一个示例将参数哈希作为第一个可选参数传入,这是另一回事!
如果不希望具有默认值,则可以使用nil。
如果你想读一篇好的文章,请看"Ruby 2关键字参数“。
https://stackoverflow.com/questions/15308163
复制相似问题