为什么Ruby的DateTime.new_offset不在rdoc中

时间:2014-02-25 15:20:56

标签: ruby datetime rdoc

我想使用DateTime使用方法DateTime#new_offset(0)的答案为UTC时区创建this SOF post个实例。但是,我无法在DateTime rdoc或其父类Date的rdoc中找到它的定义。然而,DateTime确实有定义的方法:

DateTime.method_defined? :new_offset # => true

必须有充分的理由说明new_offset没有出现在rdoc中。

2 个答案:

答案 0 :(得分:2)

为什么DateTime#new_offset没有出现在DateTime的RDoc中?
因为它是在父类Date中定义的。

为什么Date#new_offset没有出现在Date的RDoc中?
因为它是类Date中的私有方法(出于显而易见的原因,因为,Date - 对象没有时间部分,因此没有时区)并且私有方法不会出现在RDoc中。
Compare definition in Ruby/ext/date/date_core.c

为什么在#new_offset班而不是Date中定义了DateTime
这是一个实际问题,只能由Ruby核心开发人员来回答 我只能在这里做一个假设:
在包含类date_core.c和类Date的定义的C-definition DateTime中,定义了两个C-structs SimpleDateDataComplexDateData,镜像有问题的Ruby类,其中ComplexDateData包含SimpleDateData包含的所有字段。这两个结构的唯一原因似乎是内存使用,以使Date - 对象占用的内存少于DateTime - 对象。除此之外,所有函数都被编写为与两个结构一起使用并且没有被复制,这是显而易见的原因(例如代码维护),特别是因为两个结构都基于内部表示日期的相同逻辑。
Compare how most functions check the internal data-type with: if (simple_dat_p...
特别是函数dup_obj_with_new_offset是一个C函数,也被(稍后的)Ruby类Date的函数使用,例如。方法#httpdate和(可能因此)归因于课程Date Compare RDoc for Date#httpdate
与其他函数一样,d_lite_new_offset依赖于复制给定对象(struct),因此依赖于dup_obj_with_new_offset。因此,d_lite_new_offset可能也归因于Date 当然,还有另一种方法来概述C文件,但Ruby类的结果不会有所不同,我认为,这就是为什么没有人看到改变当前大纲的理由。

为什么DateTime#new_offset没有出现在DateTime的RDoc中?
回到最初的问题,我总结说,有两件事我不理解,因而无法解释:我不知道为什么......

  1. 为ruby-doc.org创建RDoc的脚本的编写方式不会取决于类的所有公共方法,而与它们的定义方式无关。 DateTime#new_offset不是被遗忘方法的唯一例子;还有很多其他的。仅在DateTime中就有一些,例如。 #hour#min#sec_fraction。所有这些方法都是DateTime - 对象的公共方法,但不会出现在任何RDoc ...中 Compare definition of DateTime methods
  2. 对于索引,这些类中至少没有一些方法存根可以帮助RDoc脚本获取所有公共方法。

答案 1 :(得分:0)

它在Date类中定义。以下是来源的定义:

# d.new_offset([offset=0])  ->  date
#  
# Duplicates self and resets its offset.
# 
#    d = DateTime.new(2001,2,3,4,5,6,'-02:00')
#                              #=> #<DateTime: 2001-02-03T04:05:06-02:00 ...>
#    d.new_offset('+09:00')    #=> #<DateTime: 2001-02-03T15:05:06+09:00 ...>
def new_offset(p1 = v1)
    #This is a stub, used for indexing
end