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

虽然 Ben 的答案是正确的,但另一种方法是使用类型别名

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

结合 Ben 和 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 回答