なぜこれが機能しないのか誰か教えてもらえますか?
case class XY(enum: MyEnum)
object MyEnum extends Enumeration {
val OP1, OP2 = Value
}
エラー: 見つかりません: タイプ MyEnum
ベストアンサー1
これは、MyEnum
がオブジェクトであり、オブジェクトがシングルトンであるためです。シングルトンをケース クラスの引数として渡すことはできません。そうすると、このオブジェクトのインスタンスが複数存在することになるからです。
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.Value
、OP1
の代わりに を使用します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)
}