🌊

Ruby 3.4-dev でエラーメッセージのメソッド名に定義元が含まれるようになった

2024/02/27に公開

開発版の Ruby 3.4 でエラーメッセージやバックトレースにメソッド名が含まれる場合にその定義元が含まれるようになりました。
例えば以下のようなコードを実行した場合に

module Foo
  class Bar
    def inspect
      1 + '1'
    end
  end
end

p Foo::Bar.new

今までは以下のように出力されました。

/tmp/v8Kg6AU/79:4:in `+': String can't be coerced into Integer (TypeError)

      1 + '1'
          ^^^
	from /tmp/v8Kg6AU/79:4:in `inspect'
	from /tmp/v8Kg6AU/79:9:in `p'
	from /tmp/v8Kg6AU/79:9:in `<main>'

これが +inspect のようなメソッド名を表示するときにそれが定義されているクラス名やモジュール名が含まれるようになります。

/tmp/v8Kg6AU/78:4:in 'Integer#+': String can't be coerced into Integer (TypeError)

      1 + '1'
          ^^^
	from /tmp/v8Kg6AU/78:4:in 'Foo::Bar#inspect'
	from /tmp/v8Kg6AU/78:9:in 'Kernel#p'
	from /tmp/v8Kg6AU/78:9:in '<main>'

やや冗長なケースもありそうですが、シンプルにわかりやすいですねー。

関連

GitHubで編集を提案

Discussion