簡體   English   中英

在Scala中的andThen()中進行類型推斷

[英]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 )並且沒有composeandThen

因此,您將無法編譯: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM