Rubyで構造体のようなクラスを生成するメソッドを作成したら既にStructという名前で存在していた件
タイトルの通りです
Rubyで構造体のようなクラスを生成するメソッドを作ったのですが、 実は既にStructクラスというものがあり、作ったメソッドがほぼ無意味になってしまいました。
せっかくなので、供養。
def create_struct(props_name) k = Class.new() props = props_name.clone k.class_eval do define_method(:initialize) do |**args| props.each do |pr| instance_variable_set '@' + pr, args[pr.to_sym] end end attr_accessor *props end k end
使い方。Struct
型でも全く同じ事できるよ
Chars = create_struct(['x', 'y', 'vx', 'vy', 'name']) # c = Chars.new(10, 6, 0, 1) d = Chars.new(x: 10, y: 6, vx: 0, vy: 1) p d.x # => 10 p d.y # => 6 p d.name # => nil d.name = 'Player' p d.name # => 'Player' Chars2 = Struct.new('Chars2', :x, :y, :vx, :vy, :name, keyword_init: true) d = Chars2.new(x: 10, y: 6, vx: 0, vy: 1) p d.x # => 10 p d.y # => 6 p d.name # => nil d.name = 'Player' p d.name # => 'Player'