我正在尝试了解 andThen 在Scala中的工作原理。
以下是代码:
def collectNames(fromList: List[Map[String,String]]) = {
fromList.foldLeft(new StringBuffer)((x,y) => {
x.append(y("Name")).append(",")
}).toString
}
def getOriginalList = List(Map("Name" -> "NS","Age" -> "50"),Map ("Name" -> "SS", "Age" -> "45"))
getOriginalList andThen collectNames
编译器发现这令人不愉快。似乎 collectNames 正在获得Map[String,String]
而不是List[Map[String,String]]
。
能够正确编写那些“流动”代码的小片段需要什么?
答案 0 :(得分:1)
问题是getOriginalList _
是Function0
(即() => R
)且没有compose
或andThen
。
因此,您无法编译:{{1}}
现在,如果可以将getOriginalList _ andThen collectNames _
视为部分应用的function1,它将起作用:
getOriginalList
但是在你的情况下,在组成方面,您应该将def getOriginalList(a: Any) = List(Map("Name" -> "NS","Age" -> "50"))
val composed = getOriginalList _ andThen collectNames _
视为getOriginalList
并将其用作函数参数:
val