2010-04-07 23 views
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)) 

मुझे जो परिणाम चाहिए वह सूची प्रकार ((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)) 

वहाँ एक छोटा रास्ता नहीं है?

उत्तर

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)) 
6

जबकि बेन सही जवाब है, एक वैकल्पिक एक प्रकार का उपयोग करने गया होता उर्फ:

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

बेन और oxbow_lakes के उत्तरों का मेल, आप में थोड़ा छोटा अभी भी प्राप्त कर सकते हैं:

type I3 = (Int, Int, Int) 
m.map {case (a, b) ⇒ (a+1, a+2, a+3)}(breakOut): List[I3] 
संबंधित मुद्दे

 संबंधित मुद्दे