【发布时间】:2014-07-09 02:30:04
【问题描述】:
我正在尝试将函数 apply 添加到我的 Enumerations。我想将枚举值映射到函数,然后像这样使用它:
Action(DO_THIS, "Arg string")
应该打印它的值。我有多个枚举类,我试图通过一个 trait mixin 来实现这个功能。到目前为止,我未能让编译器满意。我有这段代码无法编译:
trait EnumFunc [EnumType <: Enumeration] {
protected def funcMappings: Map[EnumType#Value, Function1[String, Unit]]
def apply(enum: EnumType#Value, arg: String): Unit =
funcMappings.getOrElse(enum, (arg: String) => ())(arg)
}
trait Action extends Enumeration with EnumFunc[Action] {
type Action = Value
val DO_THIS, DO_THAT = Value
override val funcMappings: Map[Action, Function1[String, Unit]] =
Map(DO_THIS -> ((arg: String) => println(arg)))
}
object Action extends Action
编译器产生这个错误:
error: overriding method funcMappings in trait EnumFunc of type => Map[Action#Value,String => Unit];
value funcMappings has incompatible type
override val funcMappings: Map[Action, Function1[String, Unit]] =
我无法弄清楚到底是什么问题。有人可以解释一下是否有可能实现这一点以及为什么这不能编译?
【问题讨论】:
标签: scala enumeration