为什么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
}
答案 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