代码之家  ›  专栏  ›  技术社区  ›  IttayD

快速突破到特定收藏类型?

  •  8
  • IttayD  · 技术社区  · 16 年前
    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))
    

    有近路吗?

    3 回复  |  直到 13 年前
        1
  •  12
  •   Ben Lings    16 年前

    通过让类型参数 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))
    
        2
  •  6
  •   oxbow_lakes    16 年前

    虽然本的答案是正确的,但另一种选择是使用 类型别名 :

    type I3 = (Int, Int, Int)
    m.map{case (a, b) => (a+ 1, a+2, a+3)}(breakOut[Map[_,_], I3, List[I3]])
    
        3
  •  0
  •   DNA    13 年前

    结合Ben和Oxbow_Lakes的答案,您可以缩短一点:

    type I3 = (Int, Int, Int)
    m.map {case (a, b) ⇒ (a+1, a+2, a+3)}(breakOut): List[I3]
    
    推荐文章