👋

[bugs.ruby][Bug #20319] ネストした特異クラスを参照しているときに frozen の情報が反映されないバグ報告

2024/03/14に公開

[Bug #20319] Singleton class is being frozen lazily in some cases

  • 通常であれば #freeze するとそのオブジェクトの特異クラスも freeze される
object = Object.new
klass = object.singleton_class
object.freeze
pp klass.frozen?   # => true
  • しかし、次のように singleton_class をネストして参照している場合に意図しないタイミングで freeze されるというバグ報告
object = Object.new
klass = object.singleton_class.singleton_class
object.freeze

# ここでは false を返す
pp klass.frozen?   # => false

# 特異クラスを参照し直すと
object.singleton_class.singleton_class

# true を返すようになる
pp klass.frozen?   # => true
GitHubで編集を提案

Discussion