有没有办法命名参数.map
函数?请参阅Scala示例中的以下内容:
aggregated.map( (kv: ((String, Int, Int), (Int, Int))) =>("some stuff"))
我想将它们命名为
aggregated.map( (kv: ((name:String, score:Int, anInt:Int), (age:Int, count:Int))) =>("some stuff"))
这将使映射完成时更容易引用参数。例如,我可以说kv._1._2
或score
而不是kv.score
。使代码更易读,更容易调试。
答案 0 :(得分:9)
使用“case”使用模式匹配从元组中提取变量:
aggregated.map { case((name, score, anInt), (age,count)) => ... }
您不需要指定类型注释,类型推断器会为您执行此操作:
scala> List((("a",true,2),(1.0,2L)), (("b",false,11),(2.0,3L))).map {
case ((a,b,c),(d,e)) => s"$a$b$c$d$e"
}
res3: List[String] = List(atrue21.02, bfalse112.03)
答案 1 :(得分:2)
通常的答案是使用匹配匿名函数的模式进行分解,正如另一个答案所说的那样,但这个问题也刚刚发生在我身上:
scala> List((("a",true,2),(1.0,2L)), (("b",false,11),(2.0,3L))).map { kv =>
| import kv._1.{_1 => s}
| s
| }
res1: List[String] = List(a, b)
如果你没有提取所有字段,那么字节代码比模式匹配的字符数少。
scala> List((("a",true,2),(1.0,2L)), (("b",false,11),(2.0,3L))).map {
| case ((s,_,_),_) => s
| }
res2: List[String] = List(a, b)