2008-12-17 67 views
-2

我的紅寶石(on Rails的)類的樣子:Ruby類繼承或任何問題

類Foo 高清self.method1 someAction 結束

高清self.method2 someAction 結束

def someAction // doSmth end end

任何想法如何使這項工作或實現相同的行爲一些其他方式?

謝謝!

+0

信息不足且不明確 – Chirantan 2008-12-17 16:48:59

回答

2

如果some_action是適合作爲一個類的方法,我會做這樣的:

class Foo 
    def self.method1 
    some_action 
    end 
    def self.some_action 
    # do stuff 
    end 
    def some_action 
    self.class.some_action 
    end 
end 

如果方法1應該是一個方便的方法,然後我'd就像Hates_說的那樣。

class Foo 
    def self.method1 
    self.new.some_action 
    end 
    def some_action 
    # do stuff 
    end 
end 

對我的決定通常是some_action是否更實用的方法(如生成一個隨機密鑰,在這種情況下,我會選擇第一種形式),或者如果它是一個切入點,以更復雜的東西(就像解析器,在這種情況下,我會選擇第二種形式)。

1

無法從類方法調用實例方法,而無需實際類本身的實例。你能做到這樣:

class Foo 

    def self.method1 
     myFoo = Foo.new 
     myFoo.someAction 
    end 

    def someAction 
     //doSmth 
    end 

end 
+0

感謝您的回答!然而,因爲someAction是一個幫手,我並不想爲它創造一個新的實例...然後一個很酷的想法給了我很大的啓發。我剛剛定義它旁邊的分類:)) 啊,愚蠢的我:/ – Mantas 2008-12-17 16:55:24