2017-04-24 88 views
0

我定义了一个阶枚举匹配任何枚举值:斯卡拉在case语句

object SalesChannelType extends scala.Enumeration { 
    type SalesChannelType = Value 
    val SALES_CHANNEL_1, SALES_CHANNEL_2 = Value 
} 

class SalesChannelType extends TypeReference[SalesChannelType.type] 

现在我想编写在一个单一的情况下匹配任何枚举值匹配的语句,是这样的:

SalesChannelType.SALES_CHANNEL_1 match { 
    case SalesChannelType => println(_) 
    case _ => println("specified sales channel does not exist") 

这个想法是为第一个case语句打印销售渠道,如果它在枚举中定义的话。否则,应该调用第二个case语句。目前上面的代码不会与错误编译Pattern type is incompatible with expected type, found SalesChannel.type required SalesChannel.Value

+3

如果您的程序输入得体,没有不存在的销售渠道可以达到该模式匹配。或者我错过了什么? –

+0

是的,你说得很好,这是一个不必要的匹配语句。仍然想知道它是否可能? – novon

+0

你可以制作一个[自定义模式/提取器](http://docs.scala-lang.org/tutorials/tour/extractor-objects.html)。 –

回答

1

我认为这是你在找什么(尽管@碧玉-M的评论是正确的 - 如果程序是体面的类型,这是没用的):

SalesChannelType.SALES_CHANNEL_1 match { 
    case s: SalesChannelType.Value => println(s) 
    case _ => println("specified sales channel does not exist") 
}