鉴于一个特点:
scala> trait Fn {
| type A
| type B
| def f(x: A): B
| }
defined trait Fn
我想用另一个Fn
覆盖trait
,以便:
A
是String
,那么B
必须是Int
,否则请B
输入Boolean
我该怎么做?
答案 0 :(得分:3)
看起来你正在考虑的类型成员比他们更多。我不认为你可以做你想要的东西,至少不是在同一个班级。
类型成员应该在最终类中定义,我不认为你可以做变量。
但可以让它变得有趣:
trait Fn {
type A
type B
def f(x: A): B
}
implicit object Bn extends Fn {
type A = String
type B = Int
def f(x: A): B = 5
}
implicit object Cn extends Fn {
type A = Int
type B = Boolean
def f(x: A): B = true
}
def fun[C](c: C)(implicit f: Fn { type A = C}) = {
println(f.f(c))
}
fun[String]("H") // prints 5 (calls Bn). A = String, B = Int
fun[Int](55) // prints true (calls Cn). A = Int, B = Boolean