你能解釋爲什麼開發人員使用class << self
向基類添加方法嗎?爲什麼在ruby中使用class << self?
base.rb from the GeoPlanet Gem
module GeoPlanet
class Base
class << self
def build_url(resource_path, options = {})
end
end
end
你能解釋爲什麼開發人員使用class << self
向基類添加方法嗎?爲什麼在ruby中使用class << self?
base.rb from the GeoPlanet Gem
module GeoPlanet
class Base
class << self
def build_url(resource_path, options = {})
end
end
end
因爲他不知道
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
但是你看它,就沒有必要向使用單獨的類語法。有些人只是喜歡它。
我認爲這只是一個風格/品味的問題。我喜歡在使用class << self
方法時,我想要將許多類方法組合在一起或提供某種與實例方法的可視化分離。
如果我的所有方法都是GeoPlanet作者所做的類方法,我也會使用這種方法。
是的,這聽起來正確。 – jspooner 2010-11-01 16:31:42
好吧,GeoPlanet的例子有點時髦,對吧?你的兩個例子更具可讀性,我傾向於採用'self.build_url'的方式。 – jspooner 2010-10-29 17:36:01