我敢肯定這對那些知道這些的人來說是一個愚蠢的問題,但我無法找到它對它做什麼或它是什麼的解釋。Ruby中的「p」是什麼?
CSV.open('data.csv', 'r') do |row|
p row
end
「p row
」是做什麼用的?
我敢肯定這對那些知道這些的人來說是一個愚蠢的問題,但我無法找到它對它做什麼或它是什麼的解釋。Ruby中的「p」是什麼?
CSV.open('data.csv', 'r') do |row|
p row
end
「p row
」是做什麼用的?
p()
它寫入obj.inspect
到標準輸出。
因爲對象在內核模塊中混合,所以在任何地方都可以使用p()
方法。
這是常見的,順便說一句,在詩歌模式使用它,這意味着parens被丟棄。該CSV片段可以寫成像...
CSV.open 'data.csv', 'r' do |row|
p row
end
Kernel#p
是Kernel#puts
小哥調試:或多或少的作品完全一樣,但它使用#inspect
代替#to_s
轉換它的參數。
它之所以有如此神祕的名字,是因爲您可以快速將其放入表達式中,並在調試時將其重新取出。 (我想這是少了很多有用的,現在紅寶石越來越好「正確的」調試支持。)
一些替代Kernel#p
是Kernel#pp
從yaml
從pp
標準庫和Kernel#y
(YAML)(代碼)標準庫。
您系統上已有的文檔的另一選項是ri
命令。在任何時候你可以輸入:ri p
或者如果p
被定義在很多地方(它是)中央命令,你可以試試ri Kernel.p
。其他好的投注是Array.<whatever method>
或String.<whatever method>
。
如果您最終安裝了一堆寶石,這會減慢很多,但您可以查找加速查找過程的fastri gem,令人難以置信。
內核#p比打印和放置知名度要低。
它與放入它相似,它添加一個換行符,而不是調用to_s,p調用檢查。
參考
http://garethrees.co.uk/2013/05/04/p-vs-puts-vs-print-in-ruby/
瞭解p和看跌期權的區別,你必須瞭解to_s()和實例的區別()方法。
to_s用於獲取對象的字符串表示,而instance是to_s的更開發友好的版本,它也提供了對象的內容。
class Dog
def initialize(name, breed)
@name = name
@breed = breed
end
def to_s
puts "#@name's breed is #@breed."
end
end
terra=Dog.new("Terra","Husky")
puts terra #Terra's breed is Husky.
p terra #<Dog:0x00007fbde0932a88 @name="Terra", @breed="Husky">
+1添加鏈接到文檔 – edwardsmatt 2011-08-08 23:10:34
直接鏈接到文檔的p - http://www.ruby-doc.org/core-1.8.7/Kernel.html#method-i-p – Joe 2014-01-14 15:34:28