Appeler une méthode dans une classe dans une autre classe en Ruby
Je me demandais comment je pourrais appeler une méthode d'une instance d'une classe dans une autre classe.
C'est ce que je suis venu avec
class ClassA
def method
return "This is a method_from_class_A"
end
end
class ClassB
def initialize
@method_from_class_A=instance.method
end
def method_calls_method
@method_from_class_A
end
end
instance=ClassA.new
instance2=ClassB.new
puts instance2.method_calls_method
Mais j'obtiens cette erreur:
Tests.rb:9:dans
initialize': undefined local variable or method
instance " pour # (NameError) à partir de
Les tests.rb:19:new' from Testing.rb:19:in
'
Comment pourrais-je résoudre ce problème?
Je vous remercie pour votre réponse.
OriginalL'auteur Pabi | 2015-07-11
Vous devez vous connecter pour publier un commentaire.
À partir de votre description de ce qui semble être ce que vous allez pour:
Ou de passer dans le
ClassA
exemple (ce qui est appelé l'injection de dépendance):OriginalL'auteur Mori
Une autre Option serait de prendre un regard sur les méthodes de la classe: https://rubymonk.com/learning/books/4-ruby-primer-ascent/chapters/45-more-classes/lessons/113-class-variables
Donc, dans votre code, il devrait ressembler à ceci:
*Avis de la
self.
dans ClassA pour signifier une méthode de classe. Ceci est similaire à une méthode statique dans d'autres langues.Selon wikipedia: https://en.wikipedia.org/wiki/Method_(computer_programming)#Static_methods
De classe(statiques) sont destinés à être applicable à toutes les instances d'une classe plutôt qu'à une instance spécifique.
Vous voir les méthodes de la classe beaucoup utilisé dans le rubis de la classe de Mathématiques:
http://ruby-doc.org/core-2.2.2/Math.html
Par exemple en prenant une racine carrée d'un nombre en est fait en utilisant la méthode de la classe
Math.sqrt
. C'est différent d'une méthode d'instance qui ressembleraitobject.method
au lieuClass.method
. Il y a beaucoup de ressources et tutoriaux qui explique ce concept plus en détail et sans doute plus clair.J'ai édité pour essayer d'expliquer un peu plus.
OriginalL'auteur timthez