Local-Function CALL-NEXT-METHOD

UP


Local-Function CALL-NEXT-METHOD

Local Function CALL-NEXT-METHOD

構文

call-next-method &rest args => result*

引数と戻り値

args - オブジェクト
result - 呼び出したメソッドの返却値

定義

関数call-next-methodは、 メソッド定義フォームで定義された ボディフォーム内(ただしラムダリストは除く)で、 次のメソッドを呼び出すために使用することができます。

もし次のメソッドがないときは、 ジェネリック関数no-next-methodが呼ばれます。

使用するmethod-combinationのタイプによって、 call-next-methodを実行できるメソッドが決まります。 standard method-combinationタイプは、 プライマリメソッドとaroundメソッドの中で call-next-methodの使用が許されます。 define-method-combinationの短縮形によって定義された method-combinationを使用したジェネリック関数の場合は、 call-next-methodaroundメソッドでのみ使うことができます。

call-next-methodが引数なしで呼ばれたとき、 現在のメソッドのもともとの引数が次のメソッドの渡されます。 引数のデフォルト値、setqの使用、 メソッドのパラメーターと同名の変数への再束縛の、 いずれの動作もcall-next-methodが呼び出す メソッドへ渡す値に影響しません。

call-next-methodが引数とともに呼び出されたとき、 次のメソッドはそれらの引数とともに呼ばれます。

call-next-methodが引数とともに呼び出され、 しかしオプション引数が省略されていた場合は、 次のメソッドは、それらのデフォルトの引数で呼ばれます。

関数call-next-methodは、 次のメソッドから返却されたどのような値でも返却します。

関数call-next-methodは、 レキシカルスコープと不定範囲を持っており、 メソッド定義フォームによって定義された メソッドのボディ部の中でのみ使うことができます。

グローバル環境下で、call-next-methodfboundかどうかは実装依存です。 しかし、再定義とcall-next-methodのシャドウについての制限は、 COMMON-LISPパッケージにある、 グローバル環境下においてfboundであるシンボルと同じです。 call-next-methodをメソッド定義フォームの外で 使おうとしたときの結果は未定義です。

例文

なし。

影響

defmethod, call-method, define-method-combination

例外

call-next-methodに引数が与えられたとき、 次の規則を満たさないときは型errorのエラーが生じます。 call-next-methodによって引数が変更されたとき、 その変更された引数の集合による適用可能なメソッドの集合の順番が、 元のジェネリック関数の引数による適用可能なメソッドの集合の順番と 同一でなければなりません。 最適化によるエラーチェックは可能ですが、 しかしcall-next-methodの意味を変えてはいけません。

参考

define-method-combination, defmethod, next-method-p, no-next-method, call-method, 7.6.6. メソッドの選択とコンビネーション, 7.6.6.2. Standard Method-Combination, 7.6.6.4. 組み込みのMethod-Combination,

備考

なし。


TOP, Github