Comme les parenthèses sont facultatives en ruby, les objets de méthode sont généralement "cachés" dans le sens où vous devez explicitement aller chercher l'objet de méthode via la fonction method
méthode. Cependant, si vous faites l'effort de capturer un objet méthode, il devient tout à fait clair qu'il se comporte comme un objet. Depuis Ruby >= 2.1, il est plus facile que jamais d'en tirer parti.
Par exemple, vous pouvez faire en sorte que vos méthodes se comportent plus comme en Javascript (où l'objet de la méthode n'a pas de parens et où les parens sont utilisés pour appeler la méthode) comme suit :
foo = method def foo
def a(num)
3 * num.to_i
end
n = yield if block_given?
a(n || 3)
rescue
"oops!"
end
def foo.bar(num)
a(num)
end
foo.class #=> Method
foo() #=> 9
foo.call #=> 9
foo.call{2} #=> 6
foo(){2} #=> 6
foo.call{ raise "blam!" } #=> "oops!"
foo.bar(5) #=> 15
Voir ce texte pour une version avec ces exemples écrits comme des tests.
Réponse de JRL cite le livre de Matz disant que les méthodes ne sont pas des objets comme les cordes, etc. sont, mais les objets méthodes sont réels, et à part le truc des parens/non parens, ils agissent à peu près comme n'importe quel autre objet ruby. C'est un le langage des canards Je considère donc que les méthodes sont des objets.
0 votes
Les fonctions sont des citoyens de première classe en Ruby et peuvent être converties en objets, alors pourquoi s'inquiéter ? Je pense que la réponse sera de trop bas niveau pour avoir beaucoup de sens...
3 votes
Le sont-ils ? À mon avis, le fait que vous deviez les convertir en objets fait qu'ils ne sont pas de première classe. C'est aussi ce que je voudrais apprendre des réponses.