【发布时间】:2012-04-08 15:00:40
【问题描述】:
我想用 type 关键字创建两个自定义类型,并使它们与其他类型协变,以便我可以将它们放在一个列表或映射中并通过模式匹配使用它,这可能吗?
type Reaction
type Condition = () => Boolean
type ComplexReaction extends Reaction = (Condition) => Unit
type SimpleReaction extends Reaction = () => Unit
val map = Map[Condition, Reaction]
def addPair(c: Condition, a: Reaction) { map += (c -> a) }
def executeAll {
for(puffy <- map) puffy match {
case (c, a: ComplexReaction) => a(c)
case (c, a: SimpleReaction) => if(c) a()
}
}
当然,这种type 构造在Scala 中是不允许的。有什么方法可以达到类似的结果,还是我必须制作两个单独的地图?
【问题讨论】:
-
创建一个简单的案例类层次结构,而不仅仅是键入同义词。
-
啊,是的,使用特殊的
apply方法对吗?我会试试看。 -
不,Scala 不明白具有单个
apply()方法的类可以像() => doSomething()一样被实例化......多么可悲...... -
对不起,我的评论令人困惑;我将发布我的意思作为答案。
标签: scala types covariance