【发布时间】:2012-08-27 17:11:59
【问题描述】:
好的,所以我编写了以下 Scala 代码来探索 Scala 导入。我的目标是导入除芦笋外的所有对象蔬菜成员。我了解这样做的方法是编写以下子句(在执行 com.att.scala.Vegetables 之后)
**import Vegetables.{Asparagus=>_,_}**
由于我的目的是确认上述条款的意图,我开始要求 REPL 返回 Asparagus.name。在我看来,我希望 REPL 会说类似的话 “嘿,你让我不要用你的重命名条款导入芦笋,所以我没有芦笋可以给你”
相反,REPL 返回 res5: java.lang.String = 芦笋
当然,当我输入 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")
}
}
【问题讨论】:
-
我不确定,但
import Vegetables.{Asparagus=>,},IMO 是非法语法。你应该写import Vegetables.{Asparagus => _, _} -
我的错。这是一个无意的、粗心的错误,但感谢您指出。但我确实有:进口蔬菜。 {芦笋=>_,_}