(補充1)Ruby中的p、puts、print對比

來源:互聯網
上載者:User

標籤:

p 和 puts 是 Ruby 中特別常用的方法,很多童鞋可能認為它們是差不多的,使用的時候也不加註意,但是仔細考究起來,它們是有明顯差別的。

先舉一個例子:

class Foo
  def
inspect
    "foo from inspect"
  end


  def
to_s
    "foo from to_s"
  end
end
foo = Foo.new
p foo
puts foo
p "p: <#{foo}>"
puts "puts: <#{foo}>"

這段代碼的輸出是:

p obj 相當於 puts obj.inspect

puts obj 相當於 puts obj.to_s

使用是明顯區別的,p 是使用 obj 的 inspect 方法,而 puts 是 to_s 方法。

為什麼會這樣呢?這個我想可以從 to_s 和 inspect 的區別說起,to_s 是對象的字串表示,是 puts 和雙引號字元使用的方法。inspect 是對象狀態的表示,通用用於 debug 中。 Object 中的定義了 to_s 和 inspect 方法,預設都是返回對象的類名和地址。

所以p 和 puts主要是用途的不同,p 是作為 debug 輸出,而 puts 作為對象的字串表示輸出。

另外值得一提的是,在 irb console 中,命令列中運算式求值,使用的是 p 對象的 inspect 方法。另外,通常 debug 輸出命令,也是使用對象的 inspect 方法。

再舉一個例子:

array =[2,4,6,8,10]
puts array
p array
print array

小結:

比較項目

 puts

 print

 分行符號

末尾添加分行符號

 末尾不加分行符號

 末尾添加分行符號

 非字串對象的輸出

 調用該對象的to_s方法

 調用該對象的to_s方法

 通過inspect方法將對象轉換成字串

 

(補充1)Ruby中的p、puts、print對比

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.