Ruby on rails 为什么叫';时区本地';而不是';时区。新';?
这似乎正是你所想的Ruby on rails 为什么叫';时区本地';而不是';时区。新';?,ruby-on-rails,ruby,Ruby On Rails,Ruby,这似乎正是你所想的Time.zone.new所做的。虽然,时区.new不存在。为什么这种特殊的命名会偏离标准 更新: 问题在于理解为什么Rails在实例化某个特定类型的新对象时会偏离使用.new的惯例。例如,使用Time.zone.local(2013,10,1)而不是Time.zone.new(2013,10,1)来获取TimeWithZone对象。并不是所有返回新值的方法都被称为new 一般来说,new总是类上的一个方法,它返回所述类的一个新实例。然而,Time.zone.local不是类,
Time.zone.new
所做的。虽然,时区.new
不存在。为什么这种特殊的命名会偏离标准
更新:
问题在于理解为什么Rails在实例化某个特定类型的新对象时会偏离使用
.new
的惯例。例如,使用Time.zone.local(2013,10,1)
而不是Time.zone.new(2013,10,1)
来获取TimeWithZone
对象。并不是所有返回新值的方法都被称为new
一般来说,new
总是类上的一个方法,它返回所述类的一个新实例。然而,Time.zone.local
不是类,而是ActiveSupport::TimeZone
的实例。将其定义为new
会产生很大的误导,因为这意味着Time.zone
返回一个类而不是一个对象实例
因此,
ActiveSupport::TimeZone#local
是在“local”(即所选)时区中创建新的ActiveSupport::TimeWithZone
实例的方法的合理名称。在通常的Rails上下文中,您将设置Time.zone
,调用Time.zone.local(…)的模式
因此清楚地说明了这里发生的事情:在用户的本地时区中创建一个新的类似时间的对象。您指的不是new
?@ndn不是在ActiveSupport::timezone
上,而是在Time
上,对吗?我投票结束这个问题,因为它与编程无关。你怎么能认为一个不存在的方法会起作用?我不明白。你说的“标准”是什么?一点也不清楚。这还意味着Time.zone.new
将返回Time.zone
类的实例,即TimeZone
实例,而不是TimeWithZone
实例。