(rontolisp) docs
← プロトコル、レコード、型

defprotocol

(defprotocol Name docstring? (method [target & args] docstring?) ...)

プロトコルを宣言します。メソッドごとにターゲットのタグ上のディスパッチャ(階層 探索なしの multimethod 形)を持ちます。名前はメソッド表を答えます。呼び出しは ターゲットのタグの完全一致、それから Object 行でディスパッチし、Object 行 なしの外れはオラクル同様シグナルを上げます。各メソッドは1つのパラメータベクター を取ります(複数アリティは拒否のまま)。

:extend-via-metadata true のプロトコルでは、値がメタデータ(with-meta) でもメソッドを実装できます。キーは名前空間で修飾したメソッドのシンボル(`area または 'user/area)です。順序はオラクルと同じで、defrecord/deftype/reify 本体の実装、 メタデータ、extend-type の行と Object の順です。satisfies? はオラクル同様メタデータを 見ません。