繁体   English   中英

Ruby:检查对象是否具有具有特定签名的方法,例如 respond_to?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM