【发布时间】:2013-07-12 17:45:20
【问题描述】:
我想测试一些可堆叠的traits,它们是从这样的一个扩展而来的:
trait Layer{
def write(s:String): String
}
每个人都以某种方式处理传入的字符串,然后将其传递给下一层,例如:
trait TimeStampLayer {
abstract override def write(s:String) = System.nanotime + super.write(s)
}
我的想法是编写一个带有这样一个夹具的基础测试类:
abstract LayerTest {
type L
val layer = new BaseLayer with L // BaseLayer would be one that does nothing
}
每个测试子类都会用这样一个可堆叠的trait 覆盖L。
这当然行不通,因为L 没有任何限制来指定它是一个特征。引用编译器,
类型 L 需要是一个特征才能混入
我也想到了类似的东西
abstract LayerTest[L <: Layer] {
//...
}
class TimeStampLayerTest extends LayerTest[TimeStampLayer] {}
但我也不能将 L 限制为一种特质,或者至少不知道如何去做
有没有办法指定一个类型是一个特征?
【问题讨论】:
-
有什么理由不能将图层表示为函数
String => String并使用函数组合?