1

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]
4

3 に答える 3

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
于 2012-07-19T19:17:30.057 に答える
0

books.inspectbooks[0].to_s絶対に同じではありません。1 つ目は、配列である object のinspectメソッドへの呼び出しです。2 つ目は、配列内に含まれているオブジェクトが何であれ、オブジェクトのメソッドbookへの呼び出しです。が正確に何であるかを指定していないので、残念ながらこれ以上は言えません。to_sbooks[0]books[0]

于 2012-07-19T19:18:59.353 に答える