7.6.2. メソッドの紹介

UP


7.6.2. メソッドの紹介

メソッドは、クラス特定か、あるいは同一性特定による動作と、 ジェネリック関数のオペレーションを定義します。

メソッドオブジェクトは、次のものと結びつけられます。 それは、メソッドの動作を定義したコード。 与えられたメソッドが適用するかどうかを特定するための一連の特定パラメーター。 ラムダリスト。 そして、method-combinationがメソッドの区分けをするために使われる、一連の修飾子。

メソッドオブジェクトは関数ではないため、関数として呼び出すことはできません。 ジェネリック関数が呼び出されたときのような場合において、 オブジェクトシステムの様々な仕組みがメソッドオブジェクトを受け取り、 そしてメソッド関数を呼び出します。 このような動作を、メソッドが実行された、あるいはメソッドが呼び出されたと言います。

メソッド定義フォームは、 ジェネリック関数の引数起因により定義メソッドを実行するためのコードを含みます。 メソッド定義フォームが評価されたとき、メソッドオブジェクトは作成され、 次の4つのアクションが取られます。

もし新しいメソッドのラムダリストがジェネリック関数のラムダリストに合致していない場合は、 エラーが発せられます。 もしジェネリック関数オプションを指定できないメソッド定義オペレーターが 新しいジェネリック関数を作成する場合は、 ジェネリック関数のラムダリストは、メソッドのものと合致するように、 メソッド定義フォームから生成されるメソッドのラムダリストから導出されます。 合致の議論については、7.6.4 ジェネリック関数の全てのメソッドのラムダリストの合意を参照。

各メソッドは特定されたラムダリストを持っており、 それはメソッドが適用されたときに決定します。 特定されたラムダリストは、通常のラムダリストに似ていますが、 要求パラメータの名前の代わりに特定パラメーターとなるのが違っています。 特定パラメーターは(変数名 特定パラメーター名)のリストであり、 特定パラメーター名は次のうちの1つを取ります。

特定パラメーター名は、ユーザーレベルのインターフェースである defmethodのようなマクロで使用されることを意図しており、 特定パラメーターは関数のインターフェース上で使われます。

要求パラメーターのみを特定化することができ、 各要求パラメーターは特定パラメーターが存在しなければなりません。 表記を単純にするために、もしメソッド定義フォームの特定化されたラムダリスト内において、 要求パラメーターが単純に変数名だけであった場合は、 その要求パラメーターはデフォルトのクラスtが指定されます。

ジェネリック関数に引数の集合が与えられたとき、 適用するメソッドは、特定パラメーターが対応する引数によって満たされる ジェネリック関数のメソッドです。 次の定義は、メソッドが適用可能かどうか、また引数が特定パラメーターを満たすかどうかとは、 どういう意味であるのかを示します。

<A1, ..., An>がジェネリック関数の要求パラメーターの順番であるとします。 <P1, ..., Pn>がメソッドMにおける要求パラメーターに対応する 特定パラメーターの順番であるとします。 各Aiの型が、型特定子Piによって特定されるとき、メソッドMは適用可能です。 全ての有効な特定パラメータは有効な型指定子でもあるため、 関数typepは、メソッドの選択において、 引数が特定パラメーターを満たすかどうかを決定するために使用できます。

全ての特定パラメーターがクラスtのメソッドは、デフォルトメソッドと呼ばれます。 これは常に適用可能ですが、他のもっと特定的なメソッドによってシャドウされるかもしれません。

メソッドは修飾子を持てます。 これはmethod-combinationがメソッドを区別するための方法としての手順を与えます。 1つか複数の修飾子を持っているメソッドは、限定されたメソッドと呼ばれます。 修飾子を持っていないメソッドは、限定されていないメソッドと呼ばれます。 修飾子はリスト以外のオブジェクトです。 標準のmethod-combinationによって定義された修飾子の型はシンボルです。

この定義の中で、「プライマリメソッド」と「補助メソッド」という語は、 これらを使用するmethod-combinationタイプにおいて、メソッドを区分けするために使用されます。 method-combinationのstandardでは、プライマリメソッドは限定されていないメソッドであり、 補助メソッドは単一の修飾子である:around, :before, :afterのうちの1つを指定したメソッドです。 これらのメソッドは、順にaroundメソッド、beforeメソッド、afterメソッドと呼びます。 method-combinationタイプがdefine-method-combinationの 短いフォームを使用して定義されたとき、 プライマリメソッドはmethod-combinationタイプの名前を修飾子に与えたメソッドになります。 そして補助メソッドは:aroundの修飾子です。 このように「プライマリメソッド」と「補助メソッド」という語は、 method-combinationタイプにおける、ただの相対的な定義となります。


TOP, Github