Scala if-else条件不能在REPL上运行

时间:2018-03-11 23:00:39

标签: scala read-eval-print-loop

我在Scala Interpreter上执行此操作 - REPL,我试图将元组的值(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)
                              }
                        }   

1 个答案:

答案 0 :(得分:4)

此代码存在许多问题。我会专注于两件事。

通过模式匹配进行变量初始化

this

在此示例中,创建并初始化了4个不同的变量val (a, b, c, d) = if (someCondition) doThis() else doThat() abc。如果等于d的右侧返回4元组,编译器会识别出它们分组为4元组并使模式匹配。所以这只有在 =doThis() 返回相同的内容时才有效,即具有相同类型模式的4元组。

无选项

的一部分

如果变量可能是doThat(),那么该变量的类型为None,其中Option[X]是变量的类型,如果不是 {{1} }。

X

请注意Noneval extra_params_map: Option[Map[Int,Int]] = if (extra_params.isEmpty) None else Some(extra_params.toMap) 的赞美,结果类型是Some()。在这种情况下,None假设Option返回Option[Map[Int,Int]]