From: Yusuke ENDOH <mame@...>
Date: 2006-11-02T02:47:32+09:00
Subject: [ruby-dev:29736] [提案] Kernel#p 	をもっと便利に

遠藤侑介と申します。

日頃から思っていたことを提案してみます。

p は nil ではなく引数を返してくれると嬉しいと思います。例えば:

def foo
  ...
  str.gsub(...)
end

というコードをデバッグしていて、返り値を見たくなったとき

def foo
  ...
  x=str.gsub(...)
  p x
  x
end

と書かないといけないのが

def foo
  ...
  p str.gsub(...)
end

の 2 ストロークで済みます。


また、関数形式でない形式で呼び出した場合、self を出力し、
self を返すというのもいいと思います。

def foo
  ...
  str.gsub(...).p
end


Ruby だけで近似的に実現するなら以下のような感じでしょうか。

class Object
  def p(*a)
    if a.empty? then
      Kernel.p(self)
      self
    else
      Kernel.p(*a)
      a.last
    end
  end
end


挙動の変更ではありますが、p はデバッグ用途のメソッドだと思われるので
実害はほぼゼロだと思います。

# 1 文字で nil を作る方法がなくなりそうなので codegolf では困るかも?

よろしくご検討ください。

-- 
Yusuke ENDOH <mame@tsg.ne.jp>