【发布时间】:2013-11-11 21:05:37
【问题描述】:
我有一个关键字和运算符的枚举(以及其他一些),例如(都是相似的):
object Keywords extends Enumeration {
val AND, ARRAY, BEGIN, ...= Value
case class Keyword(keyword: Value) extends Token[Value] {
def this(keyword: String) = this(Keywords.fromString(keyword))
def value = keyword
}
implicit def valueToKeyword(keyword: Value) = new Keyword(keyword)
}
这种隐式转换允许我在预期 Tokens 的地方传递枚举值,例如
def testFunction[T](t: Token[T]) = ...
testFunction(Keywords.ARRAY) // gets converted
testFunction(Operators.PLUS) // gets converted too
在匹配过程中似乎也没有应用相同的隐式转换,即
val token = new Keyword("ARRAY")
token match {
case Keywords.ARRAY => ... // not selected but SHOULD be
case Operators.PLUS => ... // completely different Enum
...
}
为什么?如何克服这个问题?
【问题讨论】:
标签: scala enums implicit-conversion scala-2.10