Pour des fins d'apprentissage, j'explore si je peux convertir ces trois appels de méthode:Comment convertir la méthode de proc pour et l'utilisation de la méthode Ruby
Foo::Bar.logger.debug(a)
Foo::Bar.logger.debug(b)
Foo::Bar.logger.debug(c)
dans une seule déclaration en ligne en utilisant l'approche proc &method
sténographie :
[a, b, c].each(&method(:'Foo::Bar.logger.debug'))
.debug
ne répond pas .to_proc
si naturellement:
NameError: undefined method `Foo::Bar.logger.debug' for class `#<Class:Foo>'
Cela fonctionne; cependant, mais n'est pas aussi succinct que le premier:
logger = Proc.new { |x| Foo::Bar.logger.debug(x) }
[a, b, c].each(&logger)
Est-il possible que la première approche fonctionne?
Avez-vous lu le message d'erreur ? Quel est le nom de la méthode que le message d'erreur vous indique qu'il ne peut pas trouver? Qu'est-ce que cela vous dit à propos de l'argument que 'method' attend de vous? Que vous dit le message d'erreur à propos de * où * essaie-t-il de trouver cette méthode? Qu'est-ce que cela vous dit sur le fonctionnement de 'method'? Où dit-on quelque chose à propos de ne pas répondre à 'to_proc'? Pourquoi en arrivez-vous à la conclusion que le problème est avec 'to_proc'? –
Je suppose que '[a, b, c] .each {| x | Foo :: Bar.logger.debug (x)} 'serait trop simple? ;-) – Stefan
@ JörgWMittag J'ai lu le message d'erreur mais je ne l'ai pas compris. J'ai eu l'idée de passer '& method' à un func qui accepte un appel de bloc'.to_proc' sur la méthode d'un blog lié à StackOverflow: https://www.skorks.com/2013/04/ruby-ampersand-parameter-demystified/ (section: Le symbole à Proc Trick). Il ne m'est pas venu à l'esprit que la méthode 'method' devait être appelée spécifiquement dans la classe de la méthode. – doremi