初始化`Time`的子类

时间:2013-02-07 04:48:50

标签: ruby time

我想创建一个Time的子类,让我们说MyTime,这样我就可以定义(特别是与格式相关的)方法,而不会污染Time类。

class MyTime < Time; end

对于Time上定义的一些构造函数方法,我可以在MyTime中使用它们,如下所示:

MyTime.now

但有时我需要根据MyTime的实例创建Time的实例。例如,我希望基于以下内容获得MyTime的实例:

File.mtime(path_to_some_file)

这是Time个实例。构造函数Time#new不接受Time个实例,因此我无法使用它。我该怎么办?

1 个答案:

答案 0 :(得分:3)

Time类有一个at类方法,它以Time个实例作为参数:

  

在(时间)→时间
  [...]

     

创建一个新的时间对象,其值由 time ,[...]

给出

所以你可以这样说:

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

因此,将Time转换为MyTime只需调用MyTime.at即可。