さて、Scala のインポートを調べるために、以下の Scala コードを書きました。私の目的は、アスパラガスを除く対象野菜のすべてのメンバーをインポートすることです。これを行う方法は、次の節を記述することであると理解しています(com.att.scala.Vegetablesを実行した後)
**import Vegetables.{Asparagus=>_,_}**
私の目的は上記の条項の意図を確認することなので、REPL に Asparagus.name を返すように依頼することにしました。私の心の中では、REPLが 「名前の変更条項でアスパラガスを輸入しないように頼んだので、あなたに与えるアスパラガスがありません」のようなことを言うと思っていました。
代わりに、REPL は res5 を返します: java.lang.String = Asparagus
もちろん、JapaneseSpinach.color と入力すると、期待どおりに機能し、 res7 が返されます: java.awt.Color = java.awt.Color[r=0,g=255,b=0]
ここで何かが欠けていることは明らかです。私の目標は、非表示句が機能する方法を理解し、非表示句が実際にメンバーを非表示にすることを確認することです (私の頭に浮かぶ非表示は、メンバーが実際に使用できないことを意味します..)
私のコードは以下の通りです:
package com.att.scala
import java.awt.Color
trait Vegetable {
val name: String
val color: Color
}
object Vegetables {
object Asparagus extends Vegetable {
val name = "Asparagus"
val color = Color.GREEN
}
object Carrot extends Vegetable {
val name = "Carrot"
val color = Color.ORANGE
}
object Parsnip extends Vegetable {
val name = "Parsnip"
val color = Color.ORANGE
}
object JapaneseSpinach {
val name = "Komatsuna"
val color = Color.GREEN
}
val veggiePlatter = List(Asparagus, Carrot)
def showColor(veggie: Vegetable) {
println("Entered showColor")
import veggie._
println("Veggie name is " + name)
}
def test() {
println("entered test")
}
}