📘

[Bug #20968] Array#fetch_values でエラーになったときのスタックトレースが意図していないバグ報告

に公開

[Bug #20968] Array#fetch_values unexpected method name in stack trace

  • Aray#fetch_values でエラーになったときのスタックトレースで意図しないメソッド名が表示されているというバグ報告
  • いまは以下のようなエラーメッセージが出力されます
{k: 42}.fetch_values(:unknown)
__END__
output:
test.rb:1:in 'Hash#fetch_values': key not found: :unknown (KeyError)
	from test.rb:1:in '<main>'
[1].fetch_values(42)
__END__
output:
<internal:array>:211:in 'Array#fetch': index 42 outside of array bounds: -1...1 (IndexError)
	from <internal:array>:211:in 'block in Array#fetch_values'
	from <internal:array>:211:in 'Array#map!'
	from <internal:array>:211:in 'Array#fetch_values'
	from test.rb:1:in '<main>'
  • [1].fetch_values(42) の方で <internal:array> が出ちゃっているのが意図していないみたい
  • これは Ruby レイヤーで #fetch_values を実装されていることが起因ぽいですね
  • Integer#ceildiv でも同様のスタックトレースがでるとコメントされていますね
1.ceildiv(0)
__END__
output:
<internal:numeric>:304:in 'Integer#div': divided by 0 (ZeroDivisionError)
	from <internal:numeric>:304:in 'Integer#ceildiv'
	from /tmp/vE0nmCZ/114:1:in '<main>'
  • なのでこれ自体はバグというよりかは仕様みたいです
  • ただ、エラー内容が Array#fetch_values ではなくて Array#fetch として出力されてしまっている点は別に指摘されていますね
GitHubで編集を提案

Discussion