我讀了續集的文檔,我得到了好奇在下面的代碼片段中使用的技術:如何在紅寶石中實現此結果?
class Post < Sequel::Model(:my_posts)
(...)
end
的Sequel::Model(:my_posts)
設置數據庫表的模型。我很好奇Model(:my_posts)
中的括號。我喜歡這個界面,但是我怎樣才能做到這一點?這有點奇怪...看起來像Model
可以被稱爲一種方法......這是什麼技術?有人能給我一個例子嗎?
我讀了續集的文檔,我得到了好奇在下面的代碼片段中使用的技術:如何在紅寶石中實現此結果?
class Post < Sequel::Model(:my_posts)
(...)
end
的Sequel::Model(:my_posts)
設置數據庫表的模型。我很好奇Model(:my_posts)
中的括號。我喜歡這個界面,但是我怎樣才能做到這一點?這有點奇怪...看起來像Model
可以被稱爲一種方法......這是什麼技術?有人能給我一個例子嗎?
通常當你使用::
模塊或類時,ruby會嘗試在常量中找到::
之後的表達式。
Example::First => as constant
Example::First() => as method
運行這段代碼:
module Example
class << self
def First(a)
puts a
end
end
module First
end
end
用法:
Example::First(1) # => prints 1
當您使用class << self
你打開自己的類,這樣的方法可以被重新定義爲當前自對象(內類或模塊主體是類或模塊本身)。在SO上閱讀好question/answers。
這是很好的做法,而不是強制性的,與 小寫字母開頭的方法的名稱,因爲以大寫字母 開頭的名稱是用Ruby常量。它仍然可以使用常量名 的方法,但你不能調用它沒有括號, 因爲interpeter將查找該名稱作爲常數
續集定義了一個方法'def_model'(參見[這裏](http://sequel.jeremyevans.net/rdoc/classes/Sequel/Model/ClassMethods.html#method-i-def_Model))來定義一個Model方法給定的模塊 – user3033467
這只是在由常量'Sequel'引用的對象上調用名爲'Model'的方法,並將'Symbol':my_posts'作爲參數。該方法大概會返回'Class'類的一個實例,否則會得到一個'TypeError'。 –