1

私は Scala の初心者で、以下に質問があります。

def test() {
  var mapObj = Map(1->'a',"Add"->((x:Int,y:Int)=>(x+y)))
  mapObj("Add")
}
test()

パラメータ x:1 と y:2 を指定してメソッド「Add」を呼び出し、結果 3 を取得するにはどうすればよいですか?

あなたの親切な助けに感謝し、感謝します。あなたの答えを待っています^_^

4

2 に答える 2

0

キーと値のペアがなければ、1 -> 'a'これは簡単です。

scala> var mapObj = Map("Add"->((x:Int,y:Int)=>(x+y)))
mapObj: scala.collection.immutable.Map[String,(Int, Int) => Int] = Map(Add -> <function2>)

scala> mapObj.get("Add").get.apply(1,2)
res0: Int = 3

キーと値に異なる型がIntありString、キーとCharFunction2に型推論器が使用する最も一般的なスーパー型であるAny. 次に、扱いMap[Any, Any]にくいタイプを取得します。

キーが同じタイプになり、値が同じタイプになるようにしてください。型推論器が残りを行い、上記のコードを使用できます。

于 2013-11-01T05:18:47.910 に答える
0

問題はあなたmapObjがタイプMap[Any,Any]であるためmapObj("Add")、タイプの要素を返すことですAny(実際にはFunction2です)。したがって、コンパイラはそれを関数として使用できません。これを Function2 に変換してから使用する必要があります。

scala> val mapObj = Map(1->'a',"Add"->((x:Int,y:Int)=>(x+y)))
mapObj: scala.collection.immutable.Map[Any,Any] = Map(1 -> a, Add -> <function2>
)

scala> mapObj("Add")
res8: Any = <function2>

scala> mapObj("Add").asInstanceOf[scala.Function2[Int,Int,Int]](1,2)
res9: Int = 3

これをすべて回避するには、マップから除外1->'a'し、マップをタイプとして使用することをお勧めしますMap[Int, Function]

于 2013-11-01T05:19:08.600 に答える