我正在处理一个复杂对象的数组,我们称之为books
,我们将其称为Book
。问题是当我调用puts "#{books.inspect}"
时,ruby输出二进制流(不可读的utf8字符)。但是,当我致电puts #{books[0].to_str}"
时,我会得到一个简短而美观的输出,用于描述相关的book
。不确定它是否相关,但Book
是一个子类(我们可以称之为父类Item
),books.length=1
Ruby表示.to_s
和.inspect
是同义词,但它们在实践中显然提供了不同的结果。有谁知道为什么会发生这种情况,你能否就如何从整本书籍集中获得我想要的好输出提出建议?
其他信息:
[chk ~ ]$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]
答案 0 :(得分:2)
class Myclass
def to_s
'my string representation'
end
def inspect
'my inspection'
end
end
a= [Myclass.new]
p a
puts a
outputs ::
[my inspection]
my string representation
为数组内的每个元素调用inspect方法。如果未定义该方法,则获取默认的类表示。您只需要定义inspect
。
你可以随时做:
def inspect
self.to_s
end
答案 1 :(得分:0)
books.inspect
和books[0].to_s
绝对不一样。
第一个是对inspect
对象的book
方法的调用,它是一个数组。第二个是对to_s
对象的books[0]
方法的调用,无论它包含在数组中。
由于你没有具体说明books[0]
到底是什么,我恐怕不能再说了什么。