是否有一种方法可以检查Ruby中是否存在特定的方法签名?
例如,我想调用
thing.make(env: @@__ENV__, apiKey: "myKey")
如果我做这个检查
if thing.respond_to? 'make'
我可以以错误
结束ArgumentError: unknown keyword: :apiKey
是否有一种方法可以检查是否有特定的make(env:,apiKey:)
方法,而不仅仅是带有任何参数的make
方法
最简单的方法就是尝试挽救ArgumentError。
begin
thing.make(env: @@__ENV__, apiKey: "myKey")
rescue ArgumentError => e
...guess not...
end
还可以内省Method对象的参数。这将返回一个数组的数组,如[[:key, :env], [:key, :apiKey]]
。如果:key
是可选的,您正在寻找:keyreq
,如果它是必需的。
params = thing.method(:make).parameters
p [:env,:apiKey].all? { |arg|
params.include?([:key,arg]) || params.include?([:keyreq, arg])
}
如果你必须这样做作为应用程序代码的一部分,你可能需要重新考虑你的设计。