📘
[Bug #21377] 開発版の Ruby 3.5-dev で Set#inspect が継承されたクラス名を参照しないというバグ報告
[Bug #21377] core Set#inspect does not use inherited class name
- 開発版の Ruby 3.5-dev で
Set#inspectが継承されたクラス名を参照しないというバグ報告
class MySet < Set
end
pp MySet.new.inspect
# Ruby 3.4 => "#<MySet: {}>"
# Ruby 3.5 => "#<Set: {}>"
- これは
Setがコアクラスに移動された影響なんですが期待する挙動らしい- コアクラス(
ArrayやHashStringなど)はサブクラスで異なる出力がされることはないという理由から - https://bugs.ruby-lang.org/issues/21377#note-3
- コアクラス(
- とはいえ個人的にはサブクラスの情報がある方がわかりやすいことが多いので
#<Set:MySet {}>みたいな名前だとわかりやすかったりするのかなー - そもそも
Set#inspectのフォーマットをSet[1, 2, 3]みたいにする話も出ているのでそっちはまた別チケで話されていますね - 最終的には『サブクラスの名前』を参照するように対応されました
- https://bugs.ruby-lang.org/issues/21377#note-7
- フォーマットがちょっと違うのは別チケでの対応による影響
- [Feature #21389] Simplify Set#inspect output
class MySet < Set
end
pp MySet.new.inspect
# Ruby 3.4 => "#<MySet: {}>"
# Ruby 3.5 => "MySet[]"
Discussion