2013-02-07 185 views
2

我想創建一個Time的子類,比如說MyTime,這樣我就可以定義(特別是與格式相關的)方法而不會污染Time類。初始化'Time'的子類

class MyTime < Time; end 

有關Time定義了一些構造方法,我可以在MyTime像這樣使用它們:

MyTime.now 

但有時我需要創建一個基於Time實例的MyTime一個實例。例如,我想基於擁有的MyTime一個實例:

File.mtime(path_to_some_file) 

這是一個Time實例。構造函數Time#new不接受Time實例,所以我不能使用它。我該怎麼做?

+0

你可以使用組合而不是繼承嗎? 'MyTime'可以簡單地保存'Time'類的實例,並將所有調用委託給它,這可能是一個更詳細的實現;但它可以讓你靈活地滿足'File.mtime(...)'的需求。 –

+0

@HunterMcMillen如果這是唯一的出路,那將是最後的手段,但如果可能的話,我想避免這種情況。 – sawa

回答

3

Time類有一個at類方法,它接受Time實例作爲參數:

在(時間)→時間
[...]

創建一個新的時間對象的值爲時間,[...]

所以你能說這樣的事情:

>> class MyTime < Time; end 
>> mt = MyTime.at(File.mtime(path_to_some_file)) 
>> mt.class 
=> MyTime 

所以轉換TimeMyTime是調用MyTime.at一件簡單的事情。