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 个不同的变量,a
、b
、c
和 d
。编译器识别出它们分组在一个 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]
.
我在 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 个不同的变量,a
、b
、c
和 d
。编译器识别出它们分组在一个 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]
.