在if-else

时间:2018-03-08 13:18:15

标签: scala

为什么IntelliJ抱怨它无法解析以下代码段中的符号“字段”?

  val condition: String = "aa"

  if (condition == "aa") {
    val fields: Int = 2
  } else if (condition == "bb") {
    val fields: Int = 3
  } else if (condition == "cc") {
    val fields: Int = 4
  }

  var g = 1
  while (g < fields) { 
     //do something
     g = g + 1
  }

4 个答案:

答案 0 :(得分:2)

名为fields的三个变量都不在第12行的范围内。变量的范围以其定义开始,并在封闭块结束时结束。

因此第4行的变量fields在第5行的}之前,第6行的第1行直到第7行,第8行的第1行直到第9行。

您想要的是在fields之外定义if。为此,您可以使用if s是Scala中的表达式的事实,因此这有效:

val fields =
  if (condition == "aa") {
    2
  } else ...

答案 1 :(得分:1)

我认为这应该是这样的,fields不在范围内,if else表达式应该确保返回Int

val condition: String = "aa"

val fields: Int = if (condition == "aa") 2
else if (condition == "bb") 3
else if (condition == "cc") 4
else 0 

  var g = 1
  while (g < fields) {
    //do something
    g = g + 1
  }

答案 2 :(得分:1)

可读性为王:

public static <T> void removeSelectionBug(ComboBox<T> comboBox) {
    comboBox.setCellFactory(p -> new ListCell<T>() {
        private T item;
        {
            setOnMousePressed(e -> comboBox.getSelectionModel().select(item));
        }


        @Override
        protected void updateItem(T item, boolean empty) {
            super.updateItem(item, empty);
            this.item = item;
            if (item != null) {
                setText(item.toString());
            }
        }
    });
}

答案 3 :(得分:0)

这是因为lexical scoping

查看您的代码,知道if中的scala是一个表达式可能会很有趣,这意味着它们有一个值。

例如:
val x: Int = if(condition) 4 else 5