好的,所以我编写了以下 Scala 代码来探索 Scala 导入。我的目标是导入除芦笋外的所有对象蔬菜成员。我知道这样做的方法是编写以下子句(在执行 com.att.scala.Vegetables 之后)
**import Vegetables.{Asparagus=>_,_}**
由于我的目的是确认上述条款的意图,我开始要求 REPL 返回 Asparagus.name。在我看来,我希望 REPL 会说 “嘿,你让我不要用你的重命名条款导入 Asparagus,所以我没有 Asparagus 可以给你”
相反,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")
}
}