¿Hay alguna manera de verificar si la firma de un método en particular está presente en Ruby?
por ejemplo quiero llamar
thing.make(env: @@__ENV__, apiKey: "myKey")si hago este control
if thing.respond_to? 'make'Puedo terminar con el error
ArgumentError: unknown keyword: :apiKey ¿Hay alguna manera de verificar que existe el método particular make(env:,apiKey:) y no solo make con cualquier argumento?
Lo más simple es probarlo y rescatar ArgumentError.
begin thing.make(env: @@__ENV__, apiKey: "myKey") rescue ArgumentError => e ...guess not... end También puede hacer una introspección de los parámetros delobjeto Método . Esto devuelve una matriz de matrices como [[:key, :env], [:key, :apiKey]] . Está buscando :key si es opcional, :keyreq si es necesario.
params = thing.method(:make).parameters p [:env,:apiKey].all? { |arg| params.include?([:key,arg]) || params.include?([:keyreq, arg]) }Si tiene que hacer esto como parte del código de la aplicación, es posible que desee reconsiderar su diseño.