私はMartinOderskyの本「ProgramminginScala」からScalaを学んでいます。彼の「パッケージとインポート」の章には、マーティンがインポート句がどのように機能するかを示している例があります。Scalaのインポート句の理解をテストするために、EclipseでScalaパースペクティブの下でVegetable.scalaというソースファイルを作成しました。このコードは、特性の名前をFruitからVegetableに変更したことと、名前を変更したことを除いて、Martinのコードと同じです。以下に示すのは、Vegetable.scalaのコードです。
package com.att.scala
import java.awt.Color
trait Vegetable {
val name: String
val color: Color
}
object Vegetables {
object Asparagus extends Vegetable { }
object Shallot extends Vegetable { }
object Cauliflower extends Vegetable { }
object Spinach extends Vegetable { }
val veggiePlatter = List(Asparagus, Shallot)
}
これらは私の発見です:Eclipseはこのコードをコンパイルすることを望んでいません。「オブジェクトの作成は不可能です。なぜなら、java.awt.Color型の特性野菜の値の色が定義されていないためです。文字列型の特性野菜の値名が定義されていません」
このコードから達成したいのは、このエラーが発生する理由を理解することです。アスパラガス、エシャロット、カリフラワーに野菜を使用できるようにするにはどうすればよいですか?この時点での私のかなり(素朴な)理解は、VegetableとVegetablesは同じパッケージと同じソースファイルで発生するため、たとえば、特性VegetableはオブジェクトAsparagus(Vegetableを拡張する)に表示される必要があるということです。
このように特性を使用する前に知っておく必要のある特性について、何か具体的なことはありますか?