"Недопустимое начало простого выражения" в scalajs при использовании:=

Если я использую

loginError := if (loginItem.username.isEmpty) None else Some(loginItem.isUsernameValid)

Компилятор говорит:

 illegal start of simple expression

когда изменился на

val err = if (loginItem.username.isEmpty) None else Some(loginItem.isUsernameValid)
loginError := err

все идет хорошо

почему я должен использовать временную переменную?

2 ответа

Вам нужно заключить в круглые скобки выражение if в первом случае, потому что (в терминах непрофессионала) приоритет if имеет более низкий приоритет, чем :=:

loginError := (if (loginItem.username.isEmpty) None else Some(loginItem.isUsernameValid))

Согласно SLS, if пункт является Expr но не SimpleExpr или же PrefixExpr,

К сожалению, в InfixExpra := b, b должен быть PrefixExpr,

Вот почему вы должны использовать временную переменную.

Другие вопросы по тегам