👌

[Bug #21440] Data のサブクラスが freeze されていると .new でエラーになるバグ報告

に公開

[Bug #21440] Cannot create instances of frozen Data subclasses

  • 次のように Data のサブクラスが freeze されているときに .new でオブジェクトを生成すると意図せずエラーになるというバグ報告
class User < Data.define(:name)
end

# クラスオブジェクト自体を freeze する
User.freeze

# .new するとエラーになる
User.new(name: "homu")
# error: can't modify frozen #<Class:User>: User (FrozenError)
  • これ Struct でも同様のエラーになるみたいですね
Class.new(Struct.new(:a)).freeze.new
# => error: can't modify frozen #<Class:#<Class:0x00007a8984639b00>>: #<Class:0x00007a8984639b00> (FrozenError)
  • この不具合は開発版の Ruby 3.5-dev で修正済み
class User < Data.define(:name)
end
User.freeze

User.new(name: "homu")
# Ruby 3.4 => error: can't modify frozen #<Class:User>: User (FrozenError)
# Ruby 3.5 => no error
GitHubで編集を提案

Discussion