Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library _builtin > class Struct > []
new(*args) -> Class
Struct クラスに新しいサブクラスを作って、それを返します。
サブクラスでは構造体のメンバに対するアクセスメソッドが定義されています。
dog = Struct.new("Dog", :name, :age) fred = dog.new("fred", 5) fred.age = 6 printf "name:%s age:%d", fred.name, fred.age #=> "name:fred age:6" を出力します
実装の都合により、クラス名の省略は後づけの機能でした。 メンバ名に String を指定できるのは後方互換性のためだと考えた方が良いでしょう。 したがって、メンバ名は Symbol で指定するのが無難です。
args[0] が String の場合、クラス名になるので、大文字で始まる必要 があります。つまり、以下のような指定はエラーになります。
p Struct.new('foo', 'bar') # => -:1:in `new': identifier foo needs to be constant (NameError)
また args[1..-1] は、Symbol か String で指定します。
p Struct.new("Foo", :foo, :bar) # => Struct::Foo
args[0] が Symbol の場合、生成した構造体クラスは名前の無い クラスになります。名前の無いクラスは最初に名前を求める際に代入され ている定数名を検索し、見つかった定数名をクラス名とします。
Foo = Struct.new(:foo, :bar) p Foo # => Foo
[SEE_ALSO] Class.new
new(*args) -> Struct
self[*args] -> Struct
(このメソッドは Struct の下位クラスにのみ定義されています) 構造体オブジェクトを生成して返します。
Foo = Struct.new(:foo, :bar) foo = Foo.new(1) p foo.values # => [1, nil]