错误:类型积分需要类型参数...... Scala

时间:2013-09-30 11:13:05

标签: scala

我在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))**

我知道这看起来很混乱,我试图发布必要的代码部分并将重要的事情放在**

之间

1 个答案:

答案 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)
相关问题