Je me demandais comment appeler une méthode dans une instance d'une classe d'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 je reçois cette erreur:
Testing.rb: 9: dans l'instance
initialize': undefined local variable or method
'pour # (NameError) à partir de Testing.rb: 19: dansnew' from Testing.rb:19:in
'
Comment pourrais-je le réparer?
Merci pour votre réponse.
D'après votre description, cela semble être ce que vous recherchez:
class ClassB
def initialize
@instance_of_class_a = ClassA.new
end
def method_calls_method
@instance_of_class_a.method
end
end
Ou pour passer dans l'instance ClassA
(on parle d'injection de dépendance):
class ClassB
def initialize(class_a_instance)
@instance_of_class_a = class_a_instance
end
def method_calls_method
@instance_of_class_a.method
end
end
instance_a = ClassA.new
instance_b = ClassB.new(instance_a)
puts instance_b.method_calls_method
Une autre option serait d’examiner les méthodes de classe: https://rubymonk.com/learning/books/4-Ruby-primer-ascent/chapters/45-more-classes/lessons/113-class-variables
Donc, dans votre code, cela ressemblerait à ceci:
class ClassA
def self.method
return "This is a method_from_class_A"
end
end
class ClassB
def method_calls_method
ClassA.method
end
end
instance=ClassB.new
puts instance.method_calls_method
* Notez que self.
dans ClassA indique 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
Les méthodes de classe (statiques) sont censées être pertinentes pour toutes les instances d'une classe plutôt que pour une instance spécifique.
Vous voyez beaucoup de méthodes de classe utilisées dans la classe Ruby Math: http://Ruby-doc.org/core-2.2.2/Math.html
Par exemple, la racine carrée d’un nombre est obtenue à l’aide de la méthode de classe Math.sqrt
. C'est différent d'une méthode d'instance qui ressemblerait à object.method
à la place de Class.method
. Il existe de nombreuses ressources et didacticiels qui expliquent ce concept de manière plus détaillée et probablement plus claire.