![](/img/trans.png)
[英]How do I reverse Hash.inspect or Array.inspect? (aka .to_s) in Ruby
[英]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.