2016-11-19 4 views
-2

, когда я пытаюсь запустить следующий код:Почему у меня нет цикла for внутри анонимной функции в scala?

val anonFunc = (x: Pos): List[Pos] => {for(i <- 1 to 10){ println(i)} 

Я получаю следующее сообщение об ошибке:

illegal start of declaration 

, и я понятия не имею, почему. Этот код используется внутри функции

+0

Что вы пытаетесь достичь здесь? Это недействительно scala – cheseaux

+0

Почему это не справедливая scala? Я создаю анонимную функцию и сохраняю ее с помощью val? – orahman2

+0

Нет, нет. Например, здесь анонимная функция: 'var inc = (x: Int) => x + 1'. Какими должны быть параметры вашей функции и что должно быть возвращено? – cheseaux

ответ

2

(1) Там два способа обеспечить правильный тип возвращаемого анонимной функции, которые я знаю:

val f = (x: Int) => { x + 1 }: Double 

val f: Int => Double = x => x + 1 

(2) Ваше for понимание вернет Unit, как это написано, не List[Pos]. Для того, чтобы вернуть то, что реально вы должны использовать yield:

val anonFunc = (x: Pos) => { for(i <- 1 to 10) yield(x) }: List[Pos] 

но, как вы сделаете это, вы заметите, что компилятор не любит List как тип возвращаемого значения, потому что for возвратов IndexedSeq, не List. Поэтому вам необходимо прямо его преобразовать:

val anonFunc = (x: Pos) => { for(i <- 1 to 10) yield(x) }.toList: List[Pos] 
Смежные вопросы