😊

【Ruby 3.4 Advent Calender】エラーメッセージ内のメソッド名にクラス名も含まれるようになった【8日目】

2024/12/08に公開

Ruby 3.4 Advent Calender 1日目の記事です。

これはなに

今年 2024年12月25日にリリースされる予定の Ruby 3.4 の新機能や変更点などを1つずつ紹介していく Advent Calender になります。
基本的には NEWS に載っている機能を紹介すると思うんですがここにない機能についても書くかもしれません。
また、記事を書いてる時点ではまだ Ruby 3.4 はリリースされる前なので Ruby 3.4 がリリースされた時点で機能が変わっている 可能性があるかもしれないので注意してください。
記事のまとめは ここを参照 してください。

エラーメッセージ内のメソッド名にクラス名も含まれるようになった

Ruby 3.3 では次のようなコードを実行したときに

class Hoge
  def foo
    1 + ""
  end
end

Hoge.new.foo

以下のようなエラーメッセージが出力されます。

test.rb:3:in `+': String can't be coerced into Integer (TypeError)

    1 + ""
        ^^
  from test.rb:3:in `foo'
  from test.rb:7:in `<main>'

このときにエラーになったメソッドや位置は +foo と表示されていました。
これが Ruby 3.4 からクラス名も含んで表示するようになります。

class Hoge
  def foo
    1 + ""
  end
end

Hoge.new.foo
__END__
test.rb:3:in 'Integer#+': String can't be coerced into Integer (TypeError)

    1 + ""
        ^^
	from test.rb:3:in 'Hoge#foo'
	from test.rb:7:in '<main>'

+fooInteger#+Hoge#foo と表示されます。
出力結果に同名のメソッドが複数ある場合はこれでどのクラスのメソッドなのかがみやすくなりますね。

関連

GitHubで編集を提案

Discussion