ruby Array.inspect与Array [element] .to_s

时间:2012-07-19 19:12:03

标签: ruby linux arrays string

我正在处理一个复杂对象的数组,我们称之为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]

2 个答案:

答案 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.inspectbooks[0].to_s绝对不一样。 第一个是对inspect对象的book方法的调用,它是一个数组。第二个是对to_s对象的books[0]方法的调用,无论它包含在数组中。 由于你没有具体说明books[0]到底是什么,我恐怕不能再说了什么。