46

知っている人にとってはばかげた質問だと思いますが、それが何をするのか、それが何であるかについての説明が見つかりません。

CSV.open('data.csv', 'r') do |row|
  p row
end

" " は何をしp rowますか?

4

6 に答える 6

83

p()カーネルメソッドです

obj.inspect標準出力に書き込みます。

Object は Kernel モジュールに混在しているため、p()メソッドはどこでも使用できます。

ところで、それを詩モードで使用するのは一般的です。つまり、括弧が削除されます。CSV スニペットは次のように記述できます...

CSV.open 'data.csv', 'r' do |row|
  p row
end

カーネルモジュールの残りの部分とともにここに文書化されています。

于 2009-11-18T19:07:24.900 に答える
23

Kernel#pは の小さなデバッグ兄弟ですKernel#puts: 多かれ少なかれそれとまったく同じように動作しますが、#inspect代わりに を使用して引数を変換します#to_s

このような不可解な名前が付いている理由は、デバッグ時にすばやく式にスローして再度取り出すことができるようにするためです。(Ruby の「適切な」デバッグ サポートがどんどん良くなってきている今では、あまり役に立たなくなっていると思います。)

いくつかの代替手段Kernel#pは、標準ライブラリKernel#ppの (pretty print) とpp標準ライブラリのKernel#y(YAML)yamlです。

于 2009-11-18T19:33:26.423 に答える
5

試してみませんか?

>> [1,2,3].each { |d| p d }
1
2
3
于 2009-11-18T19:05:05.070 に答える
2

システムに既にあるドキュメントのもう 1 つのオプションは、riコマンドです。いつでも入力できます:ri pまたはpが多くの場所で定義されている場合 (それはそうです)、中央コマンドを試すことができますri Kernel.p。他の良い賭けはArray.<whatever method>またはString.<whatever method>です。

大量の gem をインストールすることになると、これはかなり遅くなりますが、検索プロセスを信じられないほど高速化する fastri gem を検索することができます。

于 2009-11-18T19:51:42.400 に答える
1

Kernel#p は print や puts ほど知られていません。

改行を追加するという点では puts に似ていますが、to_s を呼び出すのではなく、p は inspect を呼び出します。

参考文献

http://garethrees.co.uk/2013/05/04/p-vs-puts-vs-print-in-ruby/

于 2014-07-17T04:37:28.973 に答える