获取named或optional参数的默认值

时间:2015-09-03 13:51:51

标签: ruby

我有一个看起来像这样的方法:

class A
  def my_method(a: 'key value', b = 'opt value')
    # ...
  end
end

使用反射,我可以得到如下参数名称:

A.new.method(:my_method).parameters
# => [[:key, :a], [:opt, :b]]

如何在不调用my_method的情况下获取这些参数的默认值?

1 个答案:

答案 0 :(得分:2)

这是不可能的。我现在无法找到该主题,但matz明确表示这是设计的。问题是默认值是一个任意表达式,因为Ruby中的所有内容都是表达式,它可以是任何表达式。

例如,这个怎么样:

def foo(bar = if rand < 0.5 then Time.now else rand end)

你提出的方法会在这里返回什么?

基本上,您有两种选择:

  • 评估默认值表达式。这意味着您将获得某些值,但这并不能告诉您真实表达的内容。
  • 不要通过将其打包在Proc中来评估默认值表达式。但是没有办法再从Proc中获得表达。

所以,不管怎样,你实际上并没有得到任何有用的信息。