我正在使用一个数组,我们称之为 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]
最佳答案
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
关于ruby Array.inspect 与 Array[element].to_s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11567713/