1

さて、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")
   }

}
4

1 に答える 1

0

まず、om-nom-nom にも感謝します。以前は、以下のようなインポート句を使用していました: import vegetables . {Asparagus=> , }まだ Asparagus.name と Asparagus.color を返していました。(テストとして「import Asparagus.name」と入力した場合)

これは、私が何かが欠けていることに気づいたときです。結果は直感に反します。アスパラガスは見えないはずでした。よく見てみると、私は次のようにだまされていたことがわかりました。

import com.att.scala.Vegetable.

上記のステートメントは、Vegetable のすべてのメンバーをスコープに取り込んでいる必要があります。後で名前変更とキャッチオール句を適用しましたが、最初のインポートが原因で機能しませんでした。ということで、また新たに挑戦することにしました。

Eclipse を再起動し、Eclipse を起動して次のコマンドを発行しました。 今回は次のように実行しました。

     **import com.att.scala.Vegetables.{Asparagus=>_,_}**

       **Asparagus.name**

REPL は、次の応答ですぐに返されました。

         **<console>:11: error: not found: value Asparagus
          Asparagus.name
          ^**

これが私の意図した結果でした。

于 2012-08-27T19:25:13.830 に答える