我最近开始使用scala,不太擅长... 我正在尝试编写一个函数,有点像地图值,它将递归地映射值,我的意思是,你可以在下面的例子中看到。
我试图将此功能添加到Map对象,但它一直这样说 “递归方法必须有一个返回类型”,虽然我认为我已经理解了我似乎找不到合适解决方案的问题。
感谢您的帮助!
val x = Map(1 -> 1,2 -> Map(3 -> 3))
implicit class mapOps (map:Map){
def mapRec[T](obj:T):String = obj match{
case x: Int => x.toString
case x:Map => x.mapRec(_)
}
}
这是我想得到的结果:
Map(1 -> "1", 2 -> Map(3 -> "3"))
解
勉强好奇我设法为我的问题找到解决方案
implicit class mapOps[A](map:Map[A,Any]) {
def mapRec(): Map[A, Any] = {
map.mapValues {
case x: Int => x.toString
case x: Map[A, Any] => x.mapRec()
}
}
}
它更通用了。
答案 0 :(得分:1)
x
的类型为Map[Int, Any]
,您需要为尾递归函数提供返回类型,并使用mapValues
在给定的输入映射上映射值,即{{1和}。
x