2016-10-01 66 views
3

我是一個學習scala的新人。如何檢查scala中的返回值類型

我想問一下如何檢查函數的返回值類型?

例如:

def decode(list :List[(Int, String)]):List[String] = { 

    //val result = List[String]() 
    //list.map(l => outputCharWithTime(l._1,l._2,Nil)) 
    //result 
    excuteDecode(list,List[String]()) 

    def excuteDecode(list:List[(Int,String)],result:List[String]):List[String] = list match { 
    case Nil => Nil 
    case x::Nil=>outputCharWithTime(x._1,x._2,result) 
    case x::y =>excuteDecode(y,outputCharWithTime(x._1,x._2,result)) 
    } 

    def outputCharWithTime(times:Int,str:String , result :List[String]):List[String]={ 
    times match{ 
     case 0 => result 
     case x => outputCharWithTime(times-1,str,str::result) 
    } 
    } 

} 

在該代碼中,所有的函數的返回類型設置爲列表[字符串],還創建了一個空的列表[字符串]參數excuteDecode()函數。

但是我得到一個編譯錯誤:

錯誤:(128,5)型不匹配; 發現:單位 要求:列表[字符串] }

任何人都可以告訴我爲什麼存在的問題,以及如何通過我們自己檢查實際的返回類型?

回答

3

聲明的順序在這裏很重要。

def decode(list :List[(Int, String)]):List[String] = { 

    def excuteDecode(list:List[(Int,String)],result:List[String]):List[String] = list match { 
    case Nil => Nil 
    case x::Nil=>outputCharWithTime(x._1,x._2,result) 
    case x::y =>excuteDecode(y,outputCharWithTime(x._1,x._2,result)) 
    } 

    def outputCharWithTime(times:Int,str:String , result :List[String]):List[String]={ 
    times match{ 
     case 0 => result 
     case x => outputCharWithTime(times-1,str,str::result) 
    } 
    } 

    excuteDecode(list,List[String]()) // Moved here 
} 

在Scala中,塊中的最後一個表達式定義了整個塊返回的內容;諸如def之類的語句被定義爲產生Unit())。

+0

我明白,非常感謝 – vincent