2013-09-30 59 views
0

我寫了一個代碼Scala中的許多功能,但是當我運行的代碼,在一個功能我得到3個錯誤:錯誤:類型積分需要輸入參數......斯卡拉

1)型積分需要類型參數 def date(start_date:String,end_date:String,duration:Integral,final_list:List [List [List [String]]]):List [List [List [List [String]]]] =

2)類型列表需要類型參數 failed_list_with_date :: = ListList [列表]

3)類型列表需要類型參數 failed_list_ with_date :: = ListList [名單]

這裏有從代碼相關的摘錄

def **joda_to_string(time:org.joda.time.DateTime):String**= 
{ 
    val datestring= time.getYearOfEra.toString+"-"+time.getMonthOfYear.toString+"-"+ time.getDayOfMonth.toString 
    return datestring 
} 

def date(start_date:String,end_date:String,**duration:Integral**,final_list:List[List[List[String]] ]):List[List[List[List[String]]]]= 
{ 

var failed_list_with_date=List[List[List[List[String]]]]() 
var start_list=(start_date.split("-")) 
var end_list=end_date.split("-") 
val start_date_strip=new DateTime((start_list(0).toInt), start_list(1).toInt, start_list(2).toInt,0,0,0,0) 
val end_date_strip=new DateTime((end_list(0).toInt), end_list(1).toInt, end_list(2).toInt,0,0,0,0) 
var diff=((end_date_strip.getMillis-start_date_strip.getMillis)/3600/1000/24) 
    **var a = start_date_strip 
var b =a.plusDays(duration).minusDays(1)** 
if (failed_list==List[List[List[String]]]()){} 
    else 
    { 
    **failed_list_with_date::=List[List[List]](joda_to_string(b)) 
    failed_list_with_date::=List[List[List]](joda_to_string(a))** 

我知道這看起來混亂我試圖張貼的代碼所需的零件,並把之間的重要的事情**

+2

第一件事將是以可讀的方式格式化您的問題(把確切的錯誤信息;縮進和換行源代碼) –

回答

2

哇,這是一個令人困惑的問題。

讓我們從一些重新格式化開始。另外一個樣式說明,在斯卡拉你通常不需要使用return關鍵字。任何代碼塊都會返回其最後一個表達式的值。此外,斯卡拉會自動調用的非String對象toString因爲它建立使用+結果字符串:

def joda_to_string(time: org.joda.time.DateTime): String = { 
    time.getYearOfEra.toString + "-" + time.getMonthOfYear + 
    "-" + time.getDayOfMonth 
} 

def date(start_date: String, end_date: String, duration: Int, 
      final_list: List[List[List[String]]]): List[List[List[List[String]]]] = { 

    var failed_list_with_date = List[List[List[List[String]]]]() 
    var start_list = (start_date.split("-")) 
    var end_list = end_date.split("-") 
    val start_date_strip = new DateTime((start_list(0).toInt), start_list(1).toInt, start_list(2).toInt,0,0,0,0) 
    val end_date_strip = new DateTime((end_list(0).toInt), end_list(1).toInt, end_list(2).toInt,0,0,0,0) 
    var diff=((end_date_strip.getMillis-start_date_strip.getMillis)/3600/1000/24) 
     var a = start_date_strip 
    var b = a.plusDays(duration).minusDays(1) 
    if (failed_list == List[List[List[String]]]()) {} 
     else { 
    failed_list_with_date ::= List(List(List(joda_to_string(b)))) 
    failed_list_with_date ::= List(List(List(joda_to_string(a)))) 
    } 
    } 

的錯誤實際上是相當簡單的,如果你知道一個類型參數是什麼。第一個是type Integral takes type parameters。這是因爲你使用了錯誤的類型。你可能意思是Int,這是斯卡拉的版本Integer

另外兩個提醒你List takes a type parameter。你有一個嵌套類型:List[List[List]] 那麼這裏的內部類型是List和...它需要一個類型參數。也許你的意思是List[List[List[String]]]?實際上,你需要在這裏構建一個適當類型的列表,這就是:List(List(List(joda_to_string(b))))

但我真的不知道,因爲這是我見過的最奇怪的屁股類型。

沒有試圖找出你的代碼試圖做的(因爲它使我的頭不疼),我的猜測是,你真的應該使用純List[String],你應該預先考慮到的前新元素列表每次:

failed_list_with_date ::= joda_to_string(b)