2013-09-30 5 views
0

Я написал код в Скале со многими функциями, однако, когда я запустить код в одной функции я получаю 3 ошибки:Ошибка: Тип интеграл принимает параметры типа ...... Scala

1) Интеграл типа принимает параметры типа Дата четкости (start_date: String, end_date: String, продолжительность: Integral, final_list: Список [Список [Список [String]]]): Список [Список [Список [Список [String]]]] =

2) Тип List принимает параметры типа failed_list_with_date :: = ListList [List]

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

Вау, это путаный вопрос.

Давайте начнем с некоторых переформатирования. Также примечание стиля, в 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)))) 
    } 
    } 

Ошибки на самом деле довольно прямо вперед, если вы знаете, что параметр типа. Первый - 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) 
Смежные вопросы