我想知道如何在另一个类的类实例中调用方法。
这就是我想出来的
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
但是我收到了这个错误:
Testing.rb:9:
initialize': undefined local variable or method
实例'中的#(NameError)来自 Testing.rb:19:new' from Testing.rb:19:in
'
我该如何解决?
感谢您的回复。
答案 0 :(得分:7)
根据您的描述,这似乎就是您想要的:
class ClassB
def initialize
@instance_of_class_a = ClassA.new
end
def method_calls_method
@instance_of_class_a.method
end
end
或传入ClassA
实例(这称为依赖注入):
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
答案 1 :(得分:3)
因此,在您的代码中,它看起来与此类似:
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
*注意ClassA中的self.
表示类方法。这类似于其他语言中的静态方法。
根据维基百科:https://en.wikipedia.org/wiki/Method_(computer_programming)#Static_methods
类(静态)方法旨在与类的所有实例相关,而不是与任何特定实例相关。
你看到ruby Math类中使用了很多类方法: http://ruby-doc.org/core-2.2.2/Math.html
例如,使用类方法Math.sqrt
获取数字的平方根。这与实例方法不同,后者看起来像object.method
而不是Class.method
。有很多资源和教程可以更详细地解释这个概念,并且可能更清晰。