我有一个看起来像这样的方法:
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
的情况下获取这些参数的默认值?
答案 0 :(得分:2)
这是不可能的。我现在无法找到该主题,但matz明确表示这是设计的。问题是默认值是一个任意表达式,因为Ruby中的所有内容都是表达式,它可以是任何表达式。
例如,这个怎么样:
def foo(bar = if rand < 0.5 then Time.now else rand end)
你提出的方法会在这里返回什么?
基本上,您有两种选择:
Proc
中来评估默认值表达式。但是没有办法再从Proc
中获得表达。所以,不管怎样,你实际上并没有得到任何有用的信息。