2012-05-01 29 views
2

我有這個類:調用Ruby類的名字與圓括號

class Option 
    # ORM's properties 
    def self.get(id) 
    # some ORM action 
    "result of #{id}" 
    end 
end 

而且我可以叫Option.get :setting接受的結果。如果我想撥打Option(:setting)(如String(42)(返回"42")以獲得與Option#get相同的結果,我該如何編寫該課程?

回答

1

String實際上是在Kernel module的方法:通過調用其to_s方法

字符串(ARG)→串

轉換ARGString

你會發現Array,Float,和朋友在同一個地方。內核包含在Object中,這就是所有像普通全局函數一樣使用的方法。你可以猴子補丁的內核:

module Kernel 
    def Option(id) 
     Option.get(id) 
    end 
end 

或使自己的模塊,像這樣的方法,使人們有,如果他們想訪問說Option(11)