2015-07-11 54 views
4

我在想如何在另一個類的類的實例中調用方法。在Ruby的另一個類中調用方法

這是我想出了

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:in initialize': undefined local variable or method instance' for # (NameError) from Testing.rb:19:in new' from Testing.rb:19:in '

我怎麼能解決這個問題?

感謝您的回覆。

回答

6

從你的描述,這似乎是你要什麼:

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 
2

另一種辦法是請參考上課方法:https://rubymonk.com/learning/books/4-ruby-primer-ascent/chapters/45-more-classes/lessons/113-class-variables

因此,在您的代碼中,它看起來類似於:

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

類(靜態)方法意味着相關一類的所有實例,而不是任何具體的實例。

你看類的方法在紅寶石數學課用了很多: http://ruby-doc.org/core-2.2.2/Math.html

例如在採取通過使用類方法Math.sqrt做了數的平方根。這與看起來像object.method而不是Class.method的實例方法不同。有很多資源和教程可以更詳細地解釋這個概念,並且可能更清晰。

+0

我是新來編碼,所以我不完全知道靜態方法(自我)是什麼,並做什麼。你能向我解釋一下嗎? 謝謝。 – Pabi

+0

@Pabi我編輯它來嘗試更多地解釋它。 – timthez