我在scala中编写了一个包含许多函数的代码但是当我运行代码时,在一个函数中我得到3个错误:
1)类型Integral采用类型参数 def date(start_date:String,end_date:String,duration:Integral,final_list:List [List [List [String]]]):List [List [List [List [String]]]] =
2)type List采用类型参数 failed_list_with_date :: = ListList [列表]
3)type List采用类型参数 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))**
我知道这看起来很混乱,我试图发布必要的代码部分并将重要的事情放在**
之间答案 0 :(得分:2)
让我们从一些重新格式化开始。同样是样式注释,在Scala中,您通常不需要使用return
关键字。任何代码块都将返回其最后一个表达式的值。此外,Scala将在非String对象上自动调用toString
,因为它使用+
构建结果String:
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
,这是Scala的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)