util.record
- SLIB-互換のレコード型 ¶このモジュールは、Guile と SLIB とに互換性のあるレコード型 API を提供します。 これは、Gauche のオブジェクトシステム上に構築されています。
便利なマクロ define-record-type
を提供する gauche.record
- レコード型 も
参照してください。
{util.record
}
あらしいレコード型を表わす新しいクラスを返します。
(これは SLIB では レコード型記述子とよばれているものです。)
Gauche では、この新しいクラスは <record>
のサブクラスです
(gauche.record
- レコード型 参照)。
type-name はデバッグの目的で使われる文字列です。 これは、シンボルに変換され、この新しいクラスの名前として設定されます。 field-names はフィールド名のシンボルのリストです。 各々のフィールドはこの新しいクラスのスロットとして実装されます。
以下の手続きでは、rtd は make-record-type
によって
生成されたクラスです。
{util.record
}
与えられた rtd レコード型のインスタンスを構築する手続きを
返します。返された手続きは field-names とちょうど同じ数の
引数をとります。field-names のデフォルトは '()
です。
それぞれの引数は field-names の対応するフィールドの初期値を
設定します。
{util.record
}
一つの引数をとり、与えられた引数が rtd と同じ型であり、その場合に
限り #t
を返す手続きを返します。
{util.record
}
rtd 型の field-name によって名付けられたフィールドへの
アクセサ手続きを返します。このアクセサ手続きは、rtd のインスタンスを
一つとり、そのフィールドの値を返します。
{util.record
}
rtd 型の field-name によって名付けられたフィールドへの
モディファイア手続きを返します。このモディファイア手続きは、
rtd のインスタンスと値のふたつの引数をとり、その引数を
指定されたフィールドに設定します。
(define rtd (make-record-type "my-record" '(a b c))) rtd ⇒ #<class my-record> (define make-my-record (record-constructor rtd '(a b c))) (define obj (make-my-record 1 2 3)) obj ⇒ #<my-record 0x819d9b0> ((record-predicate? rtd) obj) ⇒ #t ((record-accessor rtd 'a) obj) ⇒ 1 ((record-accessor rtd 'b) obj) ⇒ 2 ((record-accessor rtd 'c) obj) ⇒ 3 ((record-modifier rtd 'a) obj -1) ((record-accessor rtd 'a) obj) ⇒ -1