8
scala> val m = Map(1 -> 2)
m: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)

scala>  m.map{case (a, b) => (a+ 1, a+2, a+3)}
res42: scala.collection.immutable.Iterable[(Int, Int, Int)] = List((2,3,4))

私が欲しいのは、結果タイプがList [(Int、Int、Int)]になることです。私が見つけた唯一の方法は次のとおりです。

scala>  m.map{case (a, b) => (a+ 1, a+2, a+3)}(breakOut[Map[_,_], (Int, Int, Int), List[(Int, Int, Int)]])
res43: List[(Int, Int, Int)] = List((2,3,4))

もっと短い方法はありますか?

4

3 に答える 3

12

breakOut戻り型から型パラメーターを推測させることで、もう少し簡潔にすることができます。

scala>  m.map{case (a, b) => (a+1, a+2, a+3)}(breakOut) : List[(Int, Int, Int)]
res3: List[(Int, Int, Int)] = List((2,3,4))
于 2010-04-07T11:57:54.133 に答える
6

ベンの答えは正解ですが、別の方法はタイプエイリアスを使用することでした。

type I3 = (Int, Int, Int)
m.map{case (a, b) => (a+ 1, a+2, a+3)}(breakOut[Map[_,_], I3, List[I3]])
于 2010-04-07T13:57:29.040 に答える
0

ベンとoxbow_lakesの答えを組み合わせると、さらに少し短くすることができます。

type I3 = (Int, Int, Int)
m.map {case (a, b) ⇒ (a+1, a+2, a+3)}(breakOut): List[I3]
于 2013-04-25T13:46:56.393 に答える