2017-09-11 5 views
0

Dans Ruby, on peut facilement faire référence à une méthode et passer dans un rappel -comme la mode dans la même portée comme ceci:méthode de classe Ruby référence

my_method = method(:method_name) 

Comment voulez-vous faire référence à une méthode de classe définie sur une autre classe?

Donc, si je devais:

class MyClass 
    class << self 
     def my_method 
     // ... do stuff 
     end 
    end 
end 

Comment pourrais-je faire référence à cette méthode dans une autre classe à utiliser dans un appel ?

+0

Il est un peu déroutant que my_method soit une variable d'abord, puis un nom de méthode. – Stefan

Répondre

0

a répondu à ma propre question avec une réflexion:

Vous n'avez pas besoin du tout dans ce cas.

Au lieu de cela, vous pouvez simplement utiliser:

MyClass.public_method(:my_method) 
+2

'MyClass.method (: my_method)' devrait aussi fonctionner –

+0

_ "Il suffit d'utiliser' public_method' au lieu de 'method'" _ manque le point. La partie pertinente est que vous devez fournir un récepteur explicite afin de rechercher des méthodes dans un autre objet. – Stefan

0

Il n'y a pas une telle chose comme une méthode de classe en Ruby. Il n'y a que des méthodes d'instance. Ce que nous appelons une "méthode de classe", est en fait juste une méthode singleton d'un objet qui se trouve être une classe. Attendez, est-ce que je viens de dire "méthode singleton"? En fait, j'ai menti. Il n'y a pas non plus de méthodes singleton. Ce que nous appelons une "méthode singleton" n'est en fait qu'une méthode d'instance d'une classe singleton. Donc, étant donné qu'il n'y a que des méthodes d'instance, et que vous savez déjà comment référencer les méthodes d'instance, vous connaissez déjà la réponse à votre question. On vous a mal enseigné, parce que quelqu'un vous a dit qu'il y a une «méthode de classe», alors qu'en réalité il n'y en a pas.

Donc, vous avez déjà répondu à votre propre question dans votre question: la méthode que vous recherchez est Object#method.