3 votes

Pourquoi un procdé ne se préoccupe-t-il pas du nombre d'arguments?

def method1(&proc)
  proc.call(1,2,3)
end

method1{ |x,y,z,a| puts a}

Ne renvoie aucune erreur et affiche nil.

Pourquoi ne vérifie-t-il pas les arguments? Quelle est la logique derrière cela?

2voto

Anthony Points 11116

Les Proc ne se soucient pas de valider le bon nombre d'arguments mais les lambda's...

def method1(&proc)
  proc.call(1,2,3)
end

method1 { |x,y,z,a| puts a}
method1 lambda { |x,y,z,a| puts a }

Résultats :

lambda.rb:1:in `method1': nombre incorrect d'arguments (donné 1, attendu 0) (ArgumentError)
    from lambda.rb:6:in `

Depuis les docs ruby:

Pour les procédures créées à l'aide de lambda ou ->(), une erreur est générée si le mauvais nombre de paramètres est passé à un Proc avec plusieurs paramètres. Pour les procédures créées à l'aide de Proc.new ou Kernel.proc, les paramètres supplémentaires sont simplement ignorés.

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