Scala - 如何强制特定的Traits顺序

时间:2014-12-24 12:59:40

标签: scala traits

虽然在混合期间特质的顺序是完美的,但我如何以特定的方式强制他们的命令。 例如,我有这个:

val t = new Wink with Dash with Right with Left

我想提出条件,例如if Right NOT Left,然后说Dash COMES FIRST THEN Right OR Left

1 个答案:

答案 0 :(得分:3)

实现对混合特征的方式的这种限制的一种方法如下:

trait Dash[T <: Dash[T]]
trait Right extends Dash[Right]
trait Left extends Dash[Left]

val t = new Wink with Dash[Right]

这样,[T <: Dash[T]]迫使我们立即提供右或左特征。 (右留在您的要求中)

另一方面由于扩展名extends Dash[Right],在不使用Dash的情况下,不能混合使用右或左特征。 (在您的要求中,首字母首先

听起来好像是在检查某些条件以便在右或左之间做出决定。这可以这样做:

val t = if (p) new Wink with Dash[Right] else new Wink with Dash[Left]