2010-05-10 6 views

Trả lời

42

Điều này là do MyEnum là một đối tượng và các đối tượng là độc thân. Không thể chuyển các singletons như các đối số cho các lớp case, bởi vì điều đó sẽ áp đặt có nhiều hơn một instance của đối tượng này.

Nếu bạn muốn vượt qua một giá trị của MyEnum (tức là một giá trị kiểu liệt kê) sử dụng MyEnum.Value:

case class XY(enum: MyEnum.Value) 

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

Sau đó bạn có thể sử dụng MyEnum như mong đợi:

val x = XY(MyEnum.OP1) 

Bằng cách này: Một mẫu chung là xác định bí danh loại, vì vậy bạn có thể chỉnh sửa mã một chút (ví dụ: sử dụng MyEnum thay vì MyEnum.ValueOP1 thay vì 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

Tuyệt vời tôi mới có một cách! – user21845