&引用;“简单表达式的非法开始”;使用scalajs时出错:=

&引用;“简单表达式的非法开始”;使用scalajs时出错:=,scala,syntax-error,scala.js,binding.scala,Scala,Syntax Error,Scala.js,Binding.scala,如果我使用 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 一切顺利

如果我使用

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
一切顺利


为什么必须使用临时变量?

在第一种情况下,if表达式周围需要括号,因为(用外行的话说)if的优先级低于
:=

loginError := (if (loginItem.username.isEmpty) None else Some(loginItem.isUsernameValid))
根据,if子句是
Expr
,而不是
SimpleExpr
PrefixExpr

不幸的是,在
InfixExpr
a:=b
中,
b
必须是
前缀xpr

这就是为什么必须使用临时变量