Hash2class.rb

This content was produced by an LLM and could include errors.

このスクリプトはメタプログラミングでハッシュからクラスを動的生成します。Class.new のブロック内で各キーへ attr_accessor を定義し、define_method(:initialize) のクロージャでハッシュの値をインスタンス変数へセットします。生成したオブジェクトから name / age / city が参照でき、Struct を自前実装するようなイメージです。

data = { name: "Alice", age: 25, city: "Tokyo" }
#=> {name: "Alice", age: 25, city: "Tokyo"}

def create_dynamic_class(hash)
  Class.new do
    hash.each_key do |key|
      attr_accessor key.to_sym
    end
    
    define_method(:initialize) do
      hash.each do |key, value|
        instance_variable_set("@#{key}", value)
      end
    end
  end
end
#=> :create_dynamic_class

kls = create_dynamic_class(data)
#=> #<Class:0x00007f571f29eed8>
obj = kls.new
#=> #<#<Class:0x00007f571f29eed8>:0x00007f57032bfaf0
#...

obj
#=> #<#<Class:0x00007f571f29eed8>:0x00007f57032bfaf0
# @age=25,
# @city="Tokyo",
# @name="Alice">
obj.name
#=> "Alice"
obj.age
#=> 25
obj.city
#=> "Tokyo"

Ruby 4.0.6