LoginSignup
6
8

More than 5 years have passed since last update.

Ruby の TracePoint を使ってメソッドやブロックの戻り値をチェックする

Last updated at Posted at 2017-10-05

TracePoint では Ruby の処理におけるいろいろな イベント を受け取ることが出来ます。

取得できるイベント一覧

イベント 説明
:line 式の評価
:class クラス定義、特異クラス定義、モジュール定義への突入
:end クラス定義、特異クラス定義、モジュール定義の終了
:call Ruby で記述されたメソッドの呼び出し
:return Ruby で記述されたメソッド呼び出しからのリターン
:c_call Cで記述されたメソッドの呼び出し
:c_return Cで記述されたメソッド呼び出しからのリターン
:raise 例外の発生
:b_call ブロックの開始
:b_return ブロックの終了
:thread_begin スレッドの開始
:thread_end スレッドの終了
:fiber_switch ファイバーの切り替え

このイベントの中で以下の3つは return_value で戻り値を取得することが出来ます。(他のイベントで呼び出すと例外が発生します)

  • return
  • c_return
  • b_return

サンプルコードとしてはこんな感じです。( c_return はちょっと扱いにくいので省略してます )

TracePoint.trace(:return, :b_return) do |tp|
  p [tp.event, tp.return_value]
end

def say
  'hi'
end

say
(-> { 'piyo' }).call

実行結果

[:return, "hi"]
[:b_return, "piyo"]

追記

もう少しまとめたものを書きました。

Ruby の TracePoint について調べてみた

参考サイト

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8