2

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

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)
}
4

2 に答える 2

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")
  ...

そして、あなたの宣言は問題なく機能します。

于 2017-01-09T00:31:25.963 に答える
1

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

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

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)
}
于 2017-01-09T00:31:43.907 に答える