構造体クラス。Struct.new
はこのクラスのサブクラスを新たに生成し
ます。個々の構造体はサブクラスから new
を使って生成します。個々
の構造体サブクラスでは構造体のメンバに対するアクセスメソッドが定義され
ています。
Struct.new([name,] member ... )
Struct
クラスに name という名前の新しいサブクラスを作っ
て、それを返します。サブクラスでは構造体のメンバに対するアクセスメ
ソッドが定義されています。例えば:
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"
を出力します。
構造体名 name はStructのクラス定数名になりますので大文字で始 まる必要があります。member は、Symbol か文字列で指定し ます。
name を省略した場合(第一引数が Symbol の場合)、生成し た構造体クラスは名前のないクラスとなります。名前のないクラスは、最 初に名前を求める際に代入されている定数名を検索し、見つかった定数名 をクラス名とします(Class.newを参照)。
例: 構造体クラスのクラス名
p Struct.new("Foo", :foo, :bar) => Struct::Foo p Foo = Struct.new(:foo, :bar) => Foo
Struct::XXX.new(value,...)
Struct::XXX[value,...]
構造体オブジェクトを生成して返します。引数は構造体の初期値です。構
造体のメンバの数よりも多く指定するとと 例外 ArgumentError が
発生します。メンバの初期値は指定されなければ nil
です。
Foo = Struct.new(:foo, :bar) foo = Foo.new(1) p foo.values # => [1, nil]
Struct::XXX.members
構造体のメンバの名前の配列を返します。
self[nth]
構造体の nth 番目のメンバの値を返します。nth が文字列 または Symbol の場合はその名前のメンバの値を返します。
self[nth]=value
構造体の nth 番目のメンバの値を value にします。 nth が文字列または Symbol の場合はその名前のメンバの値 を value にします。
each
構造体の各メンバに対して繰り返します。
self
を返します。
length
size
構造体のメンバの数を返します。
members
構造体のメンバの名前の配列を返します。
values
to_a
構造体のメンバの値を配列にいれて返します。例えば以下のようにして passwd のエントリを出力できます。
require 'etc' print Etc.getpwuid.values.join(":"), "\n"