我想做这个:
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 方法内部的依赖项“感觉就像”访问参数或字段,即无需显式地将上下文作为参数提供给依赖项。
您确定需要您的Dependency
延长一个Function
?因为如果你不这样做,就离开extends Function1[Context,T]
退出,你的代码就可以工作了。
如果您确实需要延长Function
我不知道你的情况有什么解决方案。但在某些情况下,您可以尝试超载apply
方法。像这儿:
scala> val sum = new Function1[Int, Function1[Int, Int]] {
| def apply(a: Int) = (b: Int) => a + b
| def apply(a: Int)(implicit b: Int) = a + b
|}
sum: java.lang.Object with (Int) => (Int) => Int{def apply(a:Int)(implicit b: Int): Int} = <function1>
scala> sum(2)(3)
res0: Int = 5
scala> implicit val b = 10
b: Int = 10
scala> sum(2)
res1: Int = 12
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)