4 votes

Obtenir les noms des paramètres d'un constructeur

Je souhaite récupérer les noms des paramètres d'un constructeur. Étant donné le code suivant :

class Something
  def self.do_something(a, b); end
  def initialize(a, b); end
end

Je reçois :

Something.method(:do_something).parameters
# => [[:req, :a], [:req, :b]] 
Something.method(:new).parameters
# => [[:rest]] 

Pourquoi la Method#parameters retour [[:rest]] dans le cas de new Comment puis-je obtenir les paramètres du constructeur ?

7voto

Jörg W Mittag Points 153275

Si vous vous interrogez sur les paramètres de Something::new vous obtiendrez les paramètres de Something::new . Si vous souhaitez connaître les paramètres de Something#initialize vous devez demander Something#initialize :

Something.instance_method(:initialize).parameters
# => [[:req, :a], [:req, :b]]

1voto

sawa Points 62592

En effet, les arguments qui Something.new sont tous facultatifs. Vous pouvez passer n'importe quel nombre d'arguments à Something.new . Something.new créera une instance en n'utilisant aucun des arguments donnés, et l'ensemble des arguments qui lui sont donnés sont transmis à Something#initialize et c'est là que vous avez défini la méthode avec un nombre particulier d'arguments.

Pour obtenir ce que vous voulez, vous devez consulter directement Something#initialize :

Something.instance_method(:initialize).parameters
# => [[:req, :a], [:req, :b]]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X