Scala if-else 条件不适用于 REPL

Scala if-else condition not working on REPL

我在 Scala Interpreter - REPL 上执行此操作,我试图将 Tuple(account_df_index, disposition_df_index) 的值设置为 (0,1),但在执行时在 else 块的第一行抛出错误。如果我的理解是正确的,应该分配 (0,1) 并且 else 块不能执行。我哪里错了?

val extra_params = None
val extra_params_map = if (extra_params.equals(None)) {None} else{
    extra_params.toMap}

val (account_df_index, disposition_df_index) = if(extra_params.equals(None)) 
                        {
                        (0,1)
                        } else {
                        if(extra_params_map.contains("dataframe_index_map"){
                        val dataframe_map = 

                        extra_params_map.get("dataframe_index_map")
                        .get.parseJson
                        .convertTo[Map[String, Int]]
                        val account_df_index = dataframe_map.getOrElse("account", 0)
                        val disposition_df_index = dataframe_map.getOrElse("disposition", 1)
                        (account_df_index, disposition_df_index)
                        } else{
                              (0,1)
                              }
                        }   

这段代码有很多错误。我会专注于两件事。

通过模式匹配初始化变量

val (a, b, c, d) = if (someCondition) doThis()
                   else               doThat()

在此示例中,创建并初始化了 4 个不同的变量,abcd。编译器识别出它们分组在一个 4 元组中,并使模式匹配 如果等号 = return 的右侧是一个 4 元组 。所以这只适用于 doThis()doThat() return 相同的东西 ,即 4-具有相同类型模式的元组。

None 是选项的一部分

如果变量可能是 None 那么该变量的类型是 Option[X] 其中 X 是变量的类型,如果它是 不是 None.

val extra_params_map: Option[Map[Int,Int]] = if (extra_params.isEmpty) None 
                                             else Some(extra_params.toMap)

注意 Some()None 的补语,结果类型是 Option。在这种情况下,它是 Option[Map[Int,Int]] 假设 extra_params.toMap return 是 Map[Int,Int].