有没有办法在Ruby中显式唤起默认关键字参数?

时间:2016-08-25 07:50:46

标签: ruby

假设我有一个带有默认关键字参数的函数

def foo(bar: "baz")
  bar
end

有没有办法用关键字参数调用foo但是仍然会调用默认值?例如,一种使这项工作的方法吗?

foo(bar: :default)
#=> "baz"

或者,有没有办法在该方法中查看方法的默认参数?

3 个答案:

答案 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