感谢您回答这个问题。这是我的第一个问题,所以感谢任何帮助/批评。我正在自己(初学者)学习免费的在线版Ruby编程:实用程序员指南,第一版。下面的例子没有按照书上说的去做(当我这么做的时候):
class VU
include Comparable
attr :volume
def initialize(volume) # 0..9
@volume = volume
end
def inspect
'#' * @volume
end
# Support for ranges
def <=>(other)
self.volume <=> other.volume
end
def succ
raise(IndexError, "Volume too big") if @volume >= 9
VU.new(@volume.succ)
end
end
应该做以下的,根据书,在irb:
medium = VU.new(4)..VU.new(7)
medium.to_a » [####, #####, ######, #######]
medium.include?(VU.new(3)) » false
但是发生在我身上的是中等的。to_a返回VU对象的数组,如下所示:
#<VU:0x9648918>
#<VU:0x96488b4>
#<VU:0x964888c>
#<VU:0x9648878>
这对我来说是有意义的(我认为)。对我来说没有意义的是,书中断言应该返回的是一个"#"数组。难道我们不需要调用inspect方法来获取这些"#"吗?
谢谢!伊恩。
这是你在irb中看到的吗?在irb的返回值上隐式调用inspect
。你是正确的,数组是充满VU对象,但应该显示的是inspect
对这些对象的输出。
> x = VU.new(5)
=> #####
> x.class
=> VU
> x.succ
=> ######