知っている人にはばかげた質問だと思いますが、それが何をしているのか、それが何であるのかについての説明は見つかりません。
CSV.open('data.csv', 'r') do |row|
p row
end
"p row
" 行う?
p()
はカーネルメソッドです_obj.inspect
_を標準出力に書き込みます。
オブジェクトはカーネルモジュールに混在しているため、p()
メソッドはどこでも使用できます。
それは、詩モードで使用するのが一般的です。つまり、括弧が削除されます。 CSVスニペットは次のように書くことができます...
_CSV.open 'data.csv', 'r' do |row|
p row
end
_
文書化されています ここではカーネルの残りの部分 モジュール。
Kernel#p
はKernel#puts
の小さなデバッグ兄弟です。ほぼ同じように機能しますが、#inspect
ではなく#to_s
を使用して引数を変換します。
このように不可解な名前が付けられているのは、デバッグ時にすぐに式に入れて再度取り出すことができるようにするためです。 (Rubyがどんどん「適切な」デバッグサポートを提供するようになったので、今ではあまり役に立たないと思います。)
Kernel#p
の代わりとなるものは、pp
標準ライブラリのKernel#pp
(きれいな印刷)とyaml
標準ライブラリのKernel#y
(YAML)です。
やってみませんか?
>> [1,2,3].each { |d| p d }
1
2
3
システムにすでにあるドキュメントのもう1つのオプションは、ri
コマンドです。いつでも次のように入力できます:ri p
またはp
が中央のコマンドの多くの場所(定義されている)で定義されている場合は、ri Kernel.p
。他の良い賭けはArray.<whatever method>
またはString.<whatever method>
。
たくさんの宝石をインストールしてしまうと、速度が大幅に低下しますが、fastri宝石を検索して、ルックアッププロセスを信じられないほど高速化できます。
Kernel#pは、printとputよりもよく知られていません。
改行を追加するという点でputsに似ていますが、to_sを呼び出すのではなく、pはinspectを呼び出します。
参考文献
http://garethrees.co.uk/2013/05/04/p-vs-puts-vs-print-in-Ruby/
Pとputの違いを理解するには、to_s()メソッドとinstance()メソッドの違いを理解する必要があります。
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">