Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:从if-else获取Any而不是List_Scala - Fatal编程技术网

Scala:从if-else获取Any而不是List

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) }

以下代码段在“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)
    }

  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]
}

您甚至可以为额外的安全性定义字段的类型,如果需要,请发布特定的编译器错误。添加了编译器错误:“值大小不是任何的成员”请发布特定的编译器错误。添加了编译器错误:“值大小不是任何的成员”这是正确的,添加一个额外的“全面覆盖”条件修复了它。回想起来似乎很明显。你能编辑你的答案来明确提到那个解决方案吗?我已经编辑了答案来包含那个特定解决方案的代码。但是这是正确的,添加了一个额外的“全部捕获”条件来修复它。回想起来似乎很明显。您能否编辑您的答案以明确提及该解决方案?我已经编辑了答案,以包含该特定解决方案的代码。