我对 Ruby 的理解是,“new”关键字总是与类名相结合来创建类的新实例。在下面的代码中,可在https://gist.github.com/e9c0da1a6e92dd12cbc7找到,该代码是作为 Ruby Programming Challenge for Newbies 竞赛的解决方案提交的,作者在没有实例化类的情况下使用了 3 次“new”关键字。
在一种情况下,new(0,0) 被分配给一个常数 CLOSED。在另一种情况下,new(open,close) 是函数的返回值。为什么要这样做?以这种方式使用时,“新”在做什么?它在创造什么?
class OpenHours
attr_reader :open, :close
def initialize(open, close)
@open, @close = open, close
end
def duration
@duration ||= @open < @close ? @close - @open : 0
end
CLOSED = new(0, 0) #first new
def self.parse(open, close)
open = Time.parse(open)
close = Time.parse(close)
open = TimeUtils::seconds_from_midnight(open)
close = TimeUtils::seconds_from_midnight(close)
new(open, close) #second new
end
def offset(seconds)
self.class.new([@open, seconds].max, @close) #third new
end
end