假设我有一个带有默认关键字参数的函数
def foo(bar: "baz")
bar
end
有没有办法用关键字参数调用foo
但是仍然会调用默认值?例如,一种使这项工作的方法吗?
foo(bar: :default)
#=> "baz"
或者,有没有办法在该方法中查看方法的默认参数?
答案 0 :(得分:2)
比你想象的容易。请勿指定:
foo
# => "baz"
默认值仅适用于未明确指定的值。作为注释,这意味着在这种情况下,您将覆盖它:
foo(bar: nil)
# => nil
这就是为什么我通常会尝试编写这种形式的方法:
def foo(bar: nil)
bar or 'baz'
end
通过这种方式,您可以放心,无论您得到什么,都会返回一个值。
答案 1 :(得分:1)
tadman已经explained您无法通过Ruby的内置反射API检索方法的默认参数。
然而,您可以简单地将默认值提取到自己的方法中:
def default
'baz'
end
def foo(bar: default)
p bar: bar, default: default
end
foo
# {:bar=>"baz", :default=>"baz"}
foo(bar: nil)
# {:bar=>nil, :default=>"baz"}
此外,您可以将default
设为私有。
答案 2 :(得分:-2)
你可以这样做:
def foo(bar = "baz")
args = method(__method__).parameters // This will give current methods argument info.
bar
end