
[英]Ruby's respond_to? method is not working - method exists but false is returned
[英]Ruby: check if object has a method with particular signature, like respond_to?
有没有办法检查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])
}
如果您必须将此作为应用程序代码的一部分,您可能需要重新考虑您的设计。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.