Я хочу сделать это:
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)
Я понимаю, что имплициты обычно должны быть частью списка параметров second , но я не могу понять, как его кодировать, чтобы он компилировался и давал желаемый результат.
Объяснение: Я пытаюсь создать каркас, в котором можно определить объект "Функция", который может зависеть от других функций для вычисления их значения. Все функции должны принимать только один параметр Context. Контекст знает «результат» других функций. Экземпляры функции должны быть неизменными, а состояние должно находиться в контексте. Я хочу, чтобы функции создавали поля "зависимости" во время создания, которые неявно принимают контекст и возвращают значение зависимости в этом контексте, так что доступ к зависимости внутри метода apply "ощущается как "доступ к параметру или полю, то есть без явного указания контекста как параметра для зависимости.