9

以下のコードをご覧ください。この行は、Eclipseによって正しくないとマークされています。

var map = Map[MyEnum,Point]()

私はJavaと同等のscalaを実行しようとしています:

private enum Letters{ A,B,C}
private Map<Letters,Integer> thing= new HashMap<Letters,Integer> ();

そして、これはそれが書かれているファイル/コンテキストです。

class Point(var x:Int = 0, var y:Int = 0, var hasBeenSet:Boolean = false){

}

object MyEnum extends Enumeration{
    MyEnum = Value
    val UL,U,UR,L,R,DL,D,DR = Value
}

object MyEnumHolder {
  var map = Map[MyEnum,Point]()
  MyEnum.values.foreach(x => (map + (x -> new Point()) ) 
}

列挙型の各値が空のポイントにマップされた状態でマップのインスタンスを初期化しようとしています(これがfor eachループで行われていることです)。

編集:貼り付けたコードの編集を台無しにしたため、編集する必要がありましたが、今は有効になっているはずです

4

4 に答える 4

14
var map = Map[MyEnum.Value, Point]()

または私は好む

import MyEnum._
var map = Map[MyEnum,Point]()

編集:これが何を意味するのかを少し説明するために、列挙にValueはタイプとメソッドの両方の名前があります。 type MyEnum = Value基本的には型のエイリアスを宣言するだけValueで、次の行val UL, U... = Valueはメソッドを呼び出して、それぞれが型を持つ列挙型を生成しMyEnum.Valueます。したがって、マップを宣言するときは、キーが列挙型を格納するためにこのタイプを参照する必要があります。を使用することもできますMyEnum.MyEnumが、最初に型エイリアスを宣言する理由は、スコープにインポートして、と同じように参照できるようにするためMyEnumです。

于 2012-07-11T20:17:49.067 に答える
2

あなたはMyEnums地図に入れていませんが、:のMyEnum

var map = Map[MyEnum.Value, Point]()
于 2012-07-11T20:20:32.067 に答える
2
object MyEnum extends Enumeration {
  type MyEnum = Value /* You were missing keyword "type" here */
  val UL,U,UR,L,R,DL,D,DR = Value
}

object MyEnumHolder {
  import MyEnum.MyEnum /* Import this, otherwise type MyEnum can't be found */

  var map = Map[MyEnum, String]()
  MyEnum.values.foreach(x => (map + (x -> x.toString)))
}

また、ScalaのCaseクラスと列挙を比較することもできます。

于 2012-07-11T20:24:10.217 に答える
1

私はそれを次のもので動作させることができました。構文は少し不安定です、私は認めます。

object MyEnum extends Enumeration {
    type MyEnum = Value
    val UL, U, UR, L, R, DL, D, DR = Value
}

object Main extends App {
    Map[MyEnum.MyEnum, String]()

}

多元化に役立つと思いますが

object Diaries extends Enumeration {
    type Diary = Value
    val Steven, Jessica, Bob = Value
}

import Diaries._

val currentDiary = Steven

val interestingDiaries = List[Diary](Steven, Jessica)

したがって、ここで日記は日記のリストであり、日記はリスト内の特定の日記です。

于 2012-07-11T20:22:46.120 に答える