【发布时间】:2016-07-16 00:25:26
【问题描述】:
我是 Scala 的新手,不幸的是我被这个问题困住了。
我在Types.Subscribe 中定义了一个函数类型,我想重用如下:
object Types {
type Subscribe[T] = (T => T)
}
trait Adapter[T] {
def subscribe: Types.Subscribe[T]
}
class IntAdapter extends Adapter[Int] {
def map(subscribe: Types.Subscribe[Int]) = { 1 }
def subscribe(value: Int): Int = { 2 }
}
但是,我从 IntelliJ 收到以下错误:
类 FooAdapter 必须声明为抽象或实现 抽象成员'订阅:Types.Subscribe[T]'
好像def subscribe(value: Int): Int 和函数类型(Int => Int) 不匹配,有点混乱。如果是这种情况,我该如何定义我可以如上所述重用的订阅函数类型?
我尝试使用 apply 方法定义函数类型:
trait StreamSubscribe[T] {
def apply(value: T): T
}
但是,我也无法让它工作。
我希望订阅方法的类型签名有一个单一的事实来源,而不是在随机的地方重复它。我怎样才能做到这一点?
【问题讨论】:
-
你的特征
Adapter有def subscribe,你的IntAdapter有def subscribe(value: Int)。注意到有什么不同吗?
标签: scala function abstract traits