我可以在Scala中拥有一个可以拥有两种不同自我类型的类吗?或者以某种方式模仿它?
object Hi {
trait One {
val num = 1
}
trait Two {
val num = 2
}
class Test {
this: One => {
println(num)
}
this: Two => {
println(num)
}
}
}
import Hi._
new Test with One
new Test with Two
答案 0 :(得分:4)
分型
scala> trait Num { def num: Int }
defined trait Num
scala> trait One extends Num { val num = 1 }
defined trait One
scala> trait Two extends Num { val num = 2 }
defined trait Two
scala> class Test { _: Num => def f() = println(num) }
defined class Test
scala> new Test with One
res0: Test with One = $anon$1@389adf1d
scala> .f()
1
编辑:也许这是一个下意识的反应,我应该说类型。
答案 1 :(得分:2)
如果您想同时拥有多个自我类型,可以编写this: One with Two => ...
。拥有两个独立的自我类型,就像在你的例子中一样,对我来说没有多大意义:如果你有两个不同的主体(具有不同的方法实现,不同的成员等),为什么不将它们分成两个单独的类/性状?