2017-01-09 2 views
2

コンパニオンオブジェクト内のケースオブジェクトのリストを作成しようとしています。オブジェクトはすべて、密封された抽象クラスから継承します。しかし、コンパイラは、リスト内の各項目に対して「見つからない:value CompositeSpectrum」などと言っています。密封されたクラスとケースのオブジェクトはすべてコンパイルされます。コンパニオンオブジェクトでListを作成しようとするとエラーになります。Scala - 封印された抽象クラスを拡張するケースオブジェクトのリストを作成します。

sealed abstract class Peculiarity(val abbreviation: String, val description: String) { 
    case object CompositeSpectrum extends Peculiarity("comp", "composite spectrum") 
    case object NebularFeaturesPresent extends Peculiarity("neb", "nebular features present") 
    case object ShellStar extends Peculiarity("sh", "shell star") 
    case object Uncertainty extends Peculiarity(":", "uncertainty") 
    case object VariableSpectralFeatures extends Peculiarity("var", "variable spectral features") 
    case object WeakFeatures extends Peculiarity("wl", "weak features") 
    case object VeryBroadAbsorptionFeatures extends Peculiarity("nn", "very broad absorption features") 
    case object BroadAbsorptionFeatures extends Peculiarity("n", "broad absorption features") 
    case object EmissionLinesPresent extends Peculiarity("e", "emission lines present") 
    case object NIIIandHEIIEmission extends Peculiarity("f", "NIII and HeII emission (O stars)") 
    case object EnhancedMetalFeatures extends Peculiarity("m", "enhanced metal features") 
    case object OtherPeculiarity extends Peculiarity("p", "other peculiarity") 
    case object VeryNarrowAbsorptionLines extends Peculiarity("s", "very narrow absorption lines") 
} 

object Peculiarity { 
    val peculiarities = List[Peculiarity](
     CompositeSpectrum, 
     NebularFeaturesPresent, 
     ShellStar, 
     Uncertainty, 
     VariableSpectralFeatures, 
     WeakFeatures, 
     VeryBroadAbsorptionFeatures, 
     BroadAbsorptionFeatures, 
     EmissionLinesPresent, 
     NIIIandHEIIEmission, 
     EnhancedMetalFeatures, 
     OtherPeculiarity, 
     VeryNarrowAbsorptionLines) 
} 
+0

ここでの目的は、実行時にリストを反復することです。パターンマッチングも必要になりますが、テキストファイルを解析する際にも繰り返し処理する必要があります。 –

答えて

2

それらはPeculiarityに内部オブジェクトとして宣言されているので、それらはPeculiarityのタイプのインスタンスから参照されない限り、それらのオブジェクトが存在しないからです。

val pec = new Peculiarity("","") {} 
val peculiarities = List[Peculiarity](
    pec.CompositeSpectrum, 
    pec.NebularFeaturesPresent, 
    ... 

しかし、私は、あなたがした後、あなただけの抽象クラス外

sealed abstract class Peculiarity(val abbreviation: String, val description: String) 
    case object CompositeSpectrum extends Peculiarity("comp", "composite spectrum") 
    case object NebularFeaturesPresent extends Peculiarity("neb", "nebular features present") 
    ... 

に宣言を移動することができます。そして、あなたの宣言はうまく動作するだろうかということを疑います。

+2

ありがとう、両方の答えは正しかったが、これは私のコードがうまくいかない理由を説明しています。 –

1

シールされた抽象クラスの内側にcase objectをネストする必要はありません。

これは私のためにコンパイルされます。

sealed abstract class Peculiarity(val abbreviation: String, val description: String) 
case object CompositeSpectrum extends Peculiarity("comp", "composite spectrum") 
case object NebularFeaturesPresent extends Peculiarity("neb", "nebular features present") 
case object ShellStar extends Peculiarity("sh", "shell star") 
case object Uncertainty extends Peculiarity(":", "uncertainty") 
case object VariableSpectralFeatures extends Peculiarity("var", "variable spectral features") 
case object WeakFeatures extends Peculiarity("wl", "weak features") 
case object VeryBroadAbsorptionFeatures extends Peculiarity("nn", "very broad absorption features") 
case object BroadAbsorptionFeatures extends Peculiarity("n", "broad absorption features") 
case object EmissionLinesPresent extends Peculiarity("e", "emission lines present") 
case object NIIIandHEIIEmission extends Peculiarity("f", "NIII and HeII emission (O stars)") 
case object EnhancedMetalFeatures extends Peculiarity("m", "enhanced metal features") 
case object OtherPeculiarity extends Peculiarity("p", "other peculiarity") 
case object VeryNarrowAbsorptionLines extends Peculiarity("s", "very narrow absorption lines") 

object Peculiarity { 
    val peculiarities = List[Peculiarity](
     CompositeSpectrum, 
     NebularFeaturesPresent, 
     ShellStar, 
     Uncertainty, 
     VariableSpectralFeatures, 
     WeakFeatures, 
     VeryBroadAbsorptionFeatures, 
     BroadAbsorptionFeatures, 
     EmissionLinesPresent, 
     NIIIandHEIIEmission, 
     EnhancedMetalFeatures, 
     OtherPeculiarity, 
     VeryNarrowAbsorptionLines) 
} 
関連する問題