将枚举参数传递给case类不起作用

将枚举参数传递给case类不起作用

问题描述:

有人能告诉我为什么这不起作用吗?将枚举参数传递给case类不起作用

case class XY(enum: MyEnum) 

object MyEnum extends Enumeration { 
    val OP1, OP2 = Value 
} 

Error: not found: type MyEnum

这是因为MyEnum是一个对象和对象是单例。将单例作为参数传递给case类是不可能的,因为这会强加这个对象的多个实例。

如果你想通过MyEnum的值(即枚举值)使用MyEnum.Value

case class XY(enum: MyEnum.Value) 

object MyEnum extends Enumeration { val OP1, OP2 = Value } 

后,您可以使用MyEnum预期:

val x = XY(MyEnum.OP1) 

顺便说一句:一个常见模式是定义一个类型别名,因此您可以稍微调整代码(即使用MyEnum而不是MyEnum.ValueOP1而不是MyEnum.OP1):

object MyEnum extends Enumeration { 
    type MyEnum = Value 
    val OP1, OP2 = Value 
} 

import MyEnum._ 

case class XY(enum: MyEnum) 

class C { 
    val x = XY(OP1) 
} 
+0

好我新有一种方法! – user21845 2010-05-10 19:19:38