% 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-method
はaround
メソッドでのみ使うことができます。
call-next-method
が引数なしで呼ばれたとき、
現在のメソッドのもともとの引数が次のメソッドの渡されます。
引数のデフォルト値、setq
の使用、
メソッドのパラメーターと同名の変数への再束縛の、
いずれの動作もcall-next-method
が呼び出す
メソッドへ渡す値に影響しません。
call-next-method
が引数とともに呼び出されたとき、
次のメソッドはそれらの引数とともに呼ばれます。
call-next-method
が引数とともに呼び出され、
しかしオプション引数が省略されていた場合は、
次のメソッドは、それらのデフォルトの引数で呼ばれます。
関数call-next-method
は、
次のメソッドから返却されたどのような値でも返却します。
関数call-next-method
は、
レキシカルスコープと不定範囲を持っており、
メソッド定義フォームによって定義された
メソッドのボディ部の中でのみ使うことができます。
グローバル環境下で、call-next-method
がfbound
かどうかは実装依存です。
しかし、再定義と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,
なし。