私は値の型を表すための列挙型クラスを持っています。このクラスのコードは非常に単純です:Scala列挙型で間違った(?)型の一致
私はmathingの列挙を持ってobject Type extends Enumeration {
type Type = Value
val tInt, tBoolean, tString, tColor, tFont, tHAlign, tVAlign, tTextStyle, tUnknown = Value;
def fromValue (value:Any) : Type.Type = {
value match {
case a:Int => tInt
case a:Boolean => tBoolean
case a:Color => tColor
case a:Font => tFont
case a:HAlign.HAlign => tHAlign
case a:VAlign.VAlign => tVAlign
case a:TextStyle.TextStyle => tTextStyle
case _ => tUnknown
}
}
}
:だから
object VAlign extends Enumeration {
type VAlign = Value
val top, middle, bottom = Value
}
object HAlign extends Enumeration {
type HAlign = Value
val left, center, right = Value
}
object TextStyle extends Enumeration {
type TextStyle = Value
val bold, italic, regular = Value
}
、なぜ以下のすごみは?:また
scala> Type fromValue VAlign.bottom
res3: Type.Type = tHAlign
、どのように発生しましたこの奇妙さを避けることはできますか?異なる列挙型を区別するために値から型マッチングを行うにはどうすればよいですか?
あなたが提供した2番目のリンクを読むと、スケーラの列挙がバグであるように見えます。私は実際には、現在の状態のためにjava enumを使用することを検討しています。だから、これは私が望んでいた答えではありませんが、少なくとも私は今どこに立っているのかを知っています。ありがとう! –
2番目の考えでは、各列挙体に共通の基本クラスを使用し、列挙型の値として継承するオブジェクトを使用します。値は、作成時に基本クラスのコンパニオンオブジェクトに登録されます。これにより、必要な型の構文と、列挙値の取得が可能になります。 –
@LightningIsMyName Enumerationを使用すべきではないと一般的なことが分かっているので、封印された抽象クラスを拡張するケースオブジェクトを使用する必要があります。 –