Scala:从if-else获取Any而不是List
以下代码段在“fields.size”处失败:值size不是任何类型的成员。为什么“字段”不是我所期望的“列表”类型Scala:从if-else获取Any而不是List,scala,Scala,以下代码段在“fields.size”处失败:值size不是任何类型的成员。为什么“字段”不是我所期望的“列表”类型 val condition = "a" val fields = if (condition == "a") { List(1,2) } else if (condition == "b") { List(1,2,3) } else if (condition == "c") { List(1,2,3,4) }
val condition = "a"
val fields =
if (condition == "a") {
List(1,2)
} else if (condition == "b") {
List(1,2,3)
} else if (condition == "c") {
List(1,2,3,4)
}
var g = 1
while (g < fields.size) {
//do something
g = g + 1
}
考虑一下:如果条件等于a、b或c之外的某个值怎么办?然后,没有一个分支将执行,因此不能说字段是List类型
Runnable ScalaFIDLE:代码如下:
val condition = "a"
val fields =
if (condition == "a") {
List(1,2)
} else if (condition == "b") {
List(1,2,3)
} else if (condition == "c") {
List(1,2,3,4)
} else {
List()
}
var g = 1
while (g < fields.size) {
//do something
g = g + 1
}
println(g)
考虑一下:如果条件等于a、b或c之外的某个值怎么办?然后,没有一个分支将执行,因此不能说字段是List类型
Runnable ScalaFIDLE:代码如下:
val condition = "a"
val fields =
if (condition == "a") {
List(1,2)
} else if (condition == "b") {
List(1,2,3)
} else if (condition == "c") {
List(1,2,3,4)
} else {
List()
}
var g = 1
while (g < fields.size) {
//do something
g = g + 1
}
println(g)
当所有if表达式都失败时,Scala编译器找不到匹配的大小写。因此,对于这种情况,将返回任何类型
有效表格为
val fields =
if (condition == "a") {
List(1,2)
} else if (condition == "b") {
List(1,2,3)
} else if (condition == "c") {
List(1,2,3,4)
}else{
List.empty[Int]
}
当所有if表达式都失败时,Scala编译器找不到匹配的大小写。因此,对于这种情况,将返回任何类型
有效表格为
val fields =
if (condition == "a") {
List(1,2)
} else if (condition == "b") {
List(1,2,3)
} else if (condition == "c") {
List(1,2,3,4)
}else{
List.empty[Int]
}
即使a的if条件始终为true,也需要一个默认值 我建议
val fields = condition match {
case "a" => List(1,2)
case "b" => List(1,2,3)
case "c" => List(1,2,3,4)
case _ => List.empty[Int]
}
您甚至可以为额外的安全性定义字段的类型,如果您想要,那么您需要一个默认值,即使a的if条件始终为true 我建议
val fields = condition match {
case "a" => List(1,2)
case "b" => List(1,2,3)
case "c" => List(1,2,3,4)
case _ => List.empty[Int]
}
您甚至可以为额外的安全性定义字段的类型,如果需要,请发布特定的编译器错误。添加了编译器错误:“值大小不是任何的成员”请发布特定的编译器错误。添加了编译器错误:“值大小不是任何的成员”这是正确的,添加一个额外的“全面覆盖”条件修复了它。回想起来似乎很明显。你能编辑你的答案来明确提到那个解决方案吗?我已经编辑了答案来包含那个特定解决方案的代码。但是这是正确的,添加了一个额外的“全部捕获”条件来修复它。回想起来似乎很明显。您能否编辑您的答案以明确提及该解决方案?我已经编辑了答案,以包含该特定解决方案的代码。