それぞれの基本的な使い方
Struct
Param = Struct.new( :atk, :def)
param = Param.new(100, 50)
p "atk:#{param.atk}, def:#{param.def}"
OpenStruct
param = OpenStruct.new({atk: 100, def: 50})
param.int = 70
p "atk:#{param.atk}, def:#{param.def}, int: #{param.int}"
違い
Structはメンバを生やせない
定義していないメンバを生やそうとするとエラー。
Param = Struct.new( :atk, :def)
param = Param.new(100, 50)
param.int = 70
Structはまず型を定義する必要がある
(当たり前ながら)いきなり初期化して使うことはできない。
param = Struct.new(100, 50)
Structはハッシュを使った初期化ができない…わけではなかった
普通にやると1つめのメンバにハッシュが丸ごと入ってしまう。
Param = Struct.new( :atk, :def)
param = Param.new({atk: 100, def: 50})
p param
keyword_init=true
をして定義することでうまく初期化してくれるようになる。
Param = Struct.new( :atk, :def, keyword_init: true)
param = Param.new({atk: 100, def: 50})
p param