簡體   English   中英

ruby Array.inspect 與 Array[element].to_s

[英]ruby Array.inspect vs. Array[element].to_s

我正在處理一個復雜對象的數組,我們稱之為books<\/code> ,我們稱之為Book<\/code> 。 問題是當我調用puts "#{books.inspect}"<\/code>時,ruby 輸出二進制流(不可讀的 utf8 字符)。 但是,當我調用puts #{books[0].to_str}"<\/code>時,我會得到一個簡短、漂亮的輸出來描述所討論的book<\/code> 。不確定它是否相關,但Book<\/code>是一個子類(我們可以稱它為父類Item<\/code> ),並且books.length=1<\/code>

Ruby<\/a>暗示.to_s<\/code>和.inspect<\/code>是同義詞,但它們在實踐中顯然提供了不同的結果。 有誰知道為什么會發生這種情況,您能否就如何從整個圖書收藏中獲得我想要的出色輸出提供建議?

雜項信息:

[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

books.inspect<\/code>和books[0].to_s<\/code>絕對不一樣。 第一個是調用book<\/code>對象的inspect<\/code>方法,它是一個數組。 第二個是對books[0]<\/code>對象的to_s<\/code>方法的調用,無論它包含在數組中的是什么。 由於您沒有具體說明books[0]<\/code>的確切含義,因此恐怕我不能再多說什么了。

"

books<\/code>是一個數組,因此調用books.inspect<\/code>就是調用Array#inspect<\/code> 。 該方法通過在元素上調用.inspect<\/code>來工作,因此在本例中為Book#inspect<\/code> 。

執行字符串插值"Here's some info #{value}"<\/code>會在value<\/code>對象上調用.to_s<\/code> ,無論其類是什么。

將這些放在一起作為示例"Books #{books}"<\/code>將調用Array#to_s<\/code> (這是Array#inspect<\/code>的別名),它調用Book#inspect<\/code>來生成輸出字符串。

當您希望事情始終如一地工作時,您應該定義inspect<\/code>並將to_s<\/code>設為inspect<\/code>的別名,就像在Array<\/code>類中所做的那樣。 例如

class MyClass
  def inspect
    'my string representation'
  end
  alias_method :to_s, :inspect
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM