2016-09-14 2 views
1

Я создал эту простую анонимную функциюБлок заявления в анонимной Scala функционируют

var b = (x : Int) => if(x % 2 == 0) x + 1 else x 

и он прекрасно работает. После этого я попытался добавить другое заявление после инструкции if и before x+1.

var b = (x : Int) => if(x % 2 == 0) println(x) x + 1 else x 

и что точка я получил следующее сообщение об ошибке компилятора

не удается разрешить символ х

Пожалуйста, может кто-нибудь, дайте мне знать, почему это происходит?

ответ

5

Причина это происходит из-за того, что, хотя Scala не требует использования полуколонок большую часть времени (в отличие от Java), поскольку компилятор более оснащен, чтобы заключить, где заканчиваются выражения/выражения, если у вас есть 2 оператора/выражения на 1 строке, тогда вы необходимо отделить их для компилятора.

Ваша первая анонимная функция работает с if(x % 2 == 0) x + 1 else x является 1 выражением.

Компилятор жалуется на второй, хотя с if(x % 2 == 0) println(x) считается 1 заявлением. Следовательно, начинается следующий оператор, и теперь нет никакого контекста для x.

Другие плакаты предоставили вам решение, чтобы разбить правую часть функции на отдельные операторы, поэтому я не буду дублировать - просто добавьте объяснение, почему возникает ошибка компиляции, поскольку вы сказали, что изучаете язык. Google об использовании полуколонок в Скале, чтобы узнать больше.

5

Используйте это. Вам нужно скобка, чтобы указать эти несколько строк:

var b = (x : Int) => if(x % 2 == 0) { 
    println(x) 
    x + 1 
} else x 

Или вы можете сделать это .. вам нужно положить, что с запятой, чтобы указать компилятор они являются отдельными заявлениями:

var b = (x : Int) => if(x % 2 == 0) { println(x); x + 1 } else x 
Смежные вопросы