在 if 语句中定义新值时简单表达式的非法开始

Illegal start of simple expression when when defining new value in if-statement

我试图在 if 语句中声明一个新值,但使用以下代码出现非法启动错误。

// df(: DataFrame) is defined earlier
if (df.columns.contains(f"original_cols_$prev_k%s"))
  val df_fixed = df.drop(f"original_cols_$prev_k%s").drop(f"scaled_cols_$prev_k%s")
else // No change, but to respect the immutability...
  val df_fixed = df

如果我把它包在波括号里...

if (df.columns.contains(f"original_cols_$prev_k%s")){
  val df_fixed = df.drop(f"original_cols_$prev_k%s").drop(f"scaled_cols_$prev_k%s")
} else { // No change, but to respect the immutability...
  val df_fixed = df
}

...我在这些行中没有收到错误,但后来收到“未找到:值 df_fixed”错误。我做错了什么?

Scala expressions 由运算符和操作数组成。条件表达式 (if-else) 需要 ifelse 之后的其他表达式。在第一种情况下,当需要表达式时,您正在使用定义(例如:val int = 10)。这是第一个错误的原因。

但是通过将定义放在花括号内,您使它成为一个块表达式,因此编译器不会再报错了。

if(true) {
  val integer = 10
}

但是,integer 具有本地作用域,在外部不可用。因此 not found.

的第二个错误

您需要的是:

val integer = 
  if(somecheck()) 
    10 
  else 
    20