初始化`Time`的子类

问题描述 投票:2回答:1

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

class MyTime < Time; end

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

MyTime.now

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

File.mtime(path_to_some_file)

这是一个Time实例。构造函数Time#new不接受Time实例,所以我不能使用它。我该怎么做?

ruby time
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.