我可以在Scala中拥有多个自我类型吗?

时间:2014-08-19 19:46:55

标签: scala self-type

我可以在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

2 个答案:

答案 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 => ...。拥有两个独立的自我类型,就像在你的例子中一样,对我来说没有多大意义:如果你有两个不同的主体(具有不同的方法实现,不同的成员等),为什么不将它们分成两个单独的类/性状?

相关问题