当我尝试定义一个扩展特征的类时,我在Scala中遇到了一个奇怪的类型不匹配错误。我定义了以下特征
trait T {
def f[A,B](x: A): B
}
然后我定义了以下实现此特征的类
class A() extends T {
def f[Unit,Int](x: Unit) = {
10
}
}
这背后的想法是,我想保证任何具有T trait的类都有一个名为" f"的函数,不管这个函数的形状如何(即不管它的类型如何)。 / p>
当我尝试执行上面的代码时出现问题,我收到以下错误
定义特征T :14:错误:类型不匹配; 发现:scala.Int(10) 必需:Int
所以我不知道如何指定类型以便使这项工作。我试图将f实例化为
def f[Unit,scala.Int(10)](x: Unit) = {
10
}
然后编译器抱怨类型名称不能有'。' 。 我错过了什么?
答案 0 :(得分:2)
你可以做这样的事情
trait T[A,B] {
def f(x: A): B
}
class Impl1 extends T[Int, Unit] {
override def f(x: Int): Unit = println(x)
}
class Impl2 extends T[Unit, Int] {
override def f(x: Unit): Int = 10
}