【Rubyメモ】Struct

Structとは

Structは構造体を表現するクラスです。 構造体とは1つ以上のフィールドを持つクラスです。 これを用いることで複数のフィールドをもたせることが出来ます。

少し特殊なのはStruct.newを行なうと、Sturctクラスの サブクラスを返すことです。

通常はクラスに対して newを行なうとそのクラスのインスタンスが返るので 最初は不思議な気がしました。

コード

# subject、gpaのフィールドを定義
SchoolRecord = Struct.new(:subject,:gpa)

# スーパークラスはStructクラス(=Struct.newはStructのサブクラス)
p SchoolRecord.superclass #Struct 

record = SchoolRecord.new("english",3.2)
#recordオブジェクトでフィールドへアクセス
p record.subject #english
p record.gpa #3.2

#ハッシュっぽい使い方
p record[:subject] #english
p record.members #[:subject, :gpa]

hashとの比較

hashとどこが違うのという話がありますが、hashの場合は新たにシンボルを 定義することが出来ます。が、Structはnewした際に定義したメンバーしか使えません。

SchoolRecord = Struct.new(:subject,:gpa)
SchoolRecord[:test] = "test" #error
SchoolRecord.test = "test" #error

参考文献

パーフェクトruby