2010-10-29 60 views

回答

9

因爲他不知道

def GeoPlanet::Base.build_url(resource_path, options = {}) end 

將工作一樣好?

嗯,它們不是100%等價的:如果GeoPlanet不存在,那麼原始代碼片段將創建模塊,但是我的版本會提高NameError。要解決這個問題,你需要做到這一點:

module GeoPlanet 
    def Base.build_url(resource_path, options = {}) end 
end 

這當然會提高一個NameError,如果Base不存在。要解決,你會怎麼做:

module GeoPlanet 
    class Base 
    def self.build_url(resource_path, options = {}) end 
    end 
end 

但是你看它,就沒有必要使用單獨的類語法。有些人只是喜歡它。

+0

好吧,GeoPlanet的例子有點時髦,對吧?你的兩個例子更具可讀性,我傾向於採用'self.build_url'的方式。 – jspooner 2010-10-29 17:36:01

6

我認爲這只是一個風格/品味的問題。我喜歡在使用class << self方法時,我想要將許多類方法組合在一起或提供某種與實例方法的可視化分離。

如果我的所有方法都是GeoPlanet作者所做的類方法,我也會使用這種方法。

+0

是的,這聽起來正確。 – jspooner 2010-11-01 16:31:42

相關問題