我想做这个:
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)
我知道implicits 通常应该是第二个参数列表的一部分,但我无法弄清楚如何对其进行编码以便编译并给出我想要的结果。
说明:我正在尝试创建一个可以定义“函数”对象的框架,该对象可以依赖于其他函数来计算它们的值。所有函数都应该只接受一个 Context 参数。上下文知道其他功能的“结果”。函数实例应该是不可变的,状态驻留在上下文中。我希望函数在创建时创建“依赖”字段,隐式获取上下文,并在该上下文中返回依赖项的值,以便访问 apply 方法内部的依赖项“感觉就像”访问参数或字段,即没有明确地将上下文作为依赖项的参数。