[英]Type inference in andThen() in Scala
我試圖了解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]]
。
能夠正確編寫“流動”代碼的小片段,我需要什么?
問題是getOriginalList _
是一個Function0
(即() => R
)並且沒有compose
或andThen
。
因此,您將無法編譯: getOriginalList _ andThen collectNames _
現在,如果可以將getOriginalList
視為部分應用的函數1,它將可以工作:
def getOriginalList(a: Any) = List(Map("Name" -> "NS","Age" -> "50"))
val composed = getOriginalList _ andThen collectNames _
但是在您的情況下,在組合方面,您可能應該將getOriginalList
視為val
並將其用作函數參數:
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"))
val comp = collectNames _ andThen ((s: String) => s.length())
val n = comp(getOriginalList) // 6 = ("NS,SS,".length())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.