私はこれをしたい:
abstract class Context {
def getInt(id: Int): Int
}
abstract class Dependency[+T]
(val name: String, val id: Int)
extends Function1[Context,T]
class IntDependency(name: String, id: Int)
extends Dependency[Int](name, id) {
def apply(implicit context: Context): Int =
context.getInt(id)
}
しかし、次のようなエラー メッセージが表示されます。
class IntDependency needs to be abstract, since method apply in trait
Function1 of type (v1: Context)Long is not defined (Note that T1 does
not match Context)
Implicit は通常、2 番目のパラメーター リストの一部であるべきであることは理解していますが、それをコンパイルして必要な結果が得られるようにコーディングする方法がわかりません。
説明: 他の関数に依存して値を計算できる「関数」オブジェクトを定義できるフレームワークを作成しようとしています。すべての関数は、1 つの Context パラメーターのみを受け取る必要があります。コンテキストは、他の関数の「結果」を知っています。関数インスタンスは不変であり、状態はコンテキストに存在する必要があります。関数が作成時に「依存関係」フィールドを作成し、暗黙的にコンテキストを取得し、そのコンテキスト内で依存関係の値を返すようにして、適用メソッド内の依存関係にアクセスすると、パラメーターまたはフィールドにアクセスするように感じます。 、つまり、コンテキストをパラメーターとして依存関係に明示的に指定することはありません。