我正在玩自省,希望在运行时提取参数计数和参数名称有可能实施这样的措施吗?
class Greeter
def self.greet(name, weekday = "Friday")
"Hello #{name}. Today is #{weekday}"
end
def self.splatter(*arguments)
arguments.join("|")
end
end
Greeter.argument_count(:greet)
=> 1..2
Greeter.argument_names(:greet)
=> [:name, :weekday]
Greeter.argument_count(:splatter)
=> [0..Infinity]
我不知道如何检索参数的名称。
然而,我通过故意调用带有大量随机参数的方法来提取参数计数,这些随机参数仅用于触发
ArgumentError
,然后从异常消息中提取允许数量的参数但是,这是危险的,不适用于splat方法签名。 最佳答案
这些东西有一个固定的格式您可以修改以下内容以满足您的需要。
class Object
def argument_count m; method(m).arity end
def argument_names m; method(m).parameters end
end
Greeter.argument_count(:greet) # => -2
Greeter.argument_names(:greet) # => [[:req, :name], [:opt, :weekday]]