以下代码段在' fields.size':"值大小不是Any"的成员。为什么'字段'不属于'列表' (正如我所料)?
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
}
答案 0 :(得分:7)
嗯,即使“a”的if条件始终为真,也需要默认值
我建议
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]
}
如果您需要,您甚至可以定义fields
的类型以获得额外的安全性
答案 1 :(得分:2)
考虑一下:如果condition
等于&#34; a&#34;,&#34; b&#34;或&#34; c&#34;?那么,没有一个分支会执行,因此不能说fields
类型为List
Runnable ScalaFiddle:https://scalafiddle.io/sf/SF4jFcK/0(下面的代码):
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)
答案 2 :(得分:2)
Scala编译器找不到匹配的大小写。因此,对于该情况,返回Any
类型
有效表格是
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]
}