Scala 错误:类型积分采用类型参数。。。。。。斯卡拉
我在scala中编写了一个包含许多函数的代码,但是当我运行该代码时,在一个函数中出现了3个错误: 1) 类型积分采用类型参数 定义日期(开始日期:字符串,结束日期:字符串,持续时间:整数,最终列表:列表[列表[列表[字符串])]):列表[列表[列表[列表[列表[字符串]]]= 2) 类型列表接受类型参数 失败的\u列表\u,日期::=ListList[列表] 3) 类型列表接受类型参数 失败的\u列表\u,日期::=ListList[列表] 下面是代码的相关摘录Scala 错误:类型积分采用类型参数。。。。。。斯卡拉,scala,Scala,我在scala中编写了一个包含许多函数的代码,但是当我运行该代码时,在一个函数中出现了3个错误: 1) 类型积分采用类型参数 定义日期(开始日期:字符串,结束日期:字符串,持续时间:整数,最终列表:列表[列表[列表[字符串])]):列表[列表[列表[列表[列表[字符串]]]= 2) 类型列表接受类型参数 失败的\u列表\u,日期::=ListList[列表] 3) 类型列表接受类型参数 失败的\u列表\u,日期::=ListList[列表] 下面是代码的相关摘录 def **joda_to_st
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))**
我知道这看起来很混乱,我试着发布代码的必要部分,并把重要的东西放在两者之间**哇,这是一个令人困惑的问题 让我们从重新格式化开始。还有一个样式说明,在Scala中,通常不需要使用
return
关键字。任何代码块都将返回其最后一个表达式的值。此外,Scala在使用+
构建结果字符串时,将自动调用非字符串对象上的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))))
}
}
如果您知道类型参数是什么,那么错误实际上是非常直接的。第一个是类型积分,它使用类型参数。这是因为您使用了错误的类型。您可能指的是Int
,这是Scala版本的Integer
另外两个提醒您,列表采用类型参数
。您有一个嵌套类型:List[List[List]]
这里的内部类型是一个列表
和。。。它需要一个类型参数。也许你的意思是List[List[List[String]]]
?实际上,您需要在这里构造一个适当类型的列表,这就是:list(list(list(joda_to_string(b)))
所做的
但我真的不知道,因为这是我见过的最奇怪的屁股类型
如果不想弄清楚你的代码想做什么(因为这会伤到我的头),我猜你真的应该使用一个简单的List[String]
,每次你都应该在列表的前面加上新元素:
failed_list_with_date ::= joda_to_string(b)
第一件事是以可读的方式格式化您的问题(将准确的错误消息放入源代码中;缩进和换行)