From: Yuumi Yoshida <yuumi3 / ey-office.com>
Subject: [ruby-list:42614] Re: メソッドの戻り値を知る方法
Date: Sat, 29 Jul 2006 15:05:59 +0900

> なるほど、これなら タイプが少なくて良いですね!

はい。手軽です。

> ただし、今回ほしいのは初心者が使えるような、なるべく頭を使わずに機械的に
> 戻り値を表示する方法がないかな? と考えています。
> 
> こんな感じで
> 
> def max(a, b)
>   print_arguments(a, b)
> 
>   if (a > b)
>    a
>   else
>    b
>  end
> 
>  print_return_value
> end

ではこれでどうでしょ?
debugprintはブロックを持ちます。
引数と戻り値を表示したいならば、debugprintの引数にメソッドの引数を、
メソッドの最後にendを置きます。

なお、debugprintは将来外すと思われるのでインデントはそのままにしてあります。

def debugprint(*args)
  printf("args = %s\n", args.map{|x| x.inspect}.join(", "))
  ret = yield
  printf("ret = %s\n", ret.inspect)
  ret
end

def max(a, b)
  debugprint(a, b) do   # *

  if (a > b)
   a
  else
   b
  end

  end                   # *
end

max(1,3)


> または、set_trace_func()などを使った、メソッド単位のトレースが出来るモ
> ジュールとかあるでしょうか?

set_trace_func() は debug.rb, trace.rb, profile.rbなどに使われています。

tracerはどうでしょう?

require 'tracer'
 
  Tracer.on によりトレース出力を有効にする。
 
  Tracer.off によりトレース出力を無効にする。
 
  また、ブロック付きで Tracer.on を呼び出すと、そのブロック内のみトレースを出力する
  。

--
rubikitch
http://www.rubyist.net/~rubikitch/