空列表的 Scala 头
Scala head of empty List
我想获取我的第一个元素:
var stack = List[Map[String, ExpValue]]()
尽管我这样做了,但我怎么可能总是收到它是空的错误消息:
if (stack.isEmpty) {
var new_map:Map[String, ExpValue] = Map();
new_map::stack;}
var x = stack.head
基本上如果它是空的就添加一个元素。
为什么head总是空的?
在列表前添加元素不会改变列表,它会创建一个新列表,其中包含新元素,后跟原始列表的元素。在这种情况下,您可以将 new_map :: stack
的结果分配给您的 stack
变量:
var stack = List[Map[String, ExpValue]]()
if (stack.isEmpty) {
var new_map: Map[String, ExpValue] = Map();
stack = new_map :: stack;
}
var x = stack.head
价值观有许多不同的形式,但处理它们的机制是相同的。例如,考虑以下代码段
中操作 +
和 ::
的行为
val x: Int = 41
1 + x
x
// res0: Int = 41
val l: List[Int] = List(41)
1 :: l
l
// res1: List[Int] = List(41)
List(41)
是一个相同意义上的值 41
是一个值,而 res1
仍然是 List(41)
而不是 List(1, 41)
出于同样的原因 res0
仍然是 41
而不是 42
.
将此概念应用于您的代码段(稍微简化后)
val stack: List[Map[String, Int]] = List()
Map() :: stack
stack
// res2: List[Map[String,Int]] = List()
你能看出为什么 res2
仍然是 List()
而不是 List(Map())
吗?
我想获取我的第一个元素:
var stack = List[Map[String, ExpValue]]()
尽管我这样做了,但我怎么可能总是收到它是空的错误消息:
if (stack.isEmpty) {
var new_map:Map[String, ExpValue] = Map();
new_map::stack;}
var x = stack.head
基本上如果它是空的就添加一个元素。 为什么head总是空的?
在列表前添加元素不会改变列表,它会创建一个新列表,其中包含新元素,后跟原始列表的元素。在这种情况下,您可以将 new_map :: stack
的结果分配给您的 stack
变量:
var stack = List[Map[String, ExpValue]]()
if (stack.isEmpty) {
var new_map: Map[String, ExpValue] = Map();
stack = new_map :: stack;
}
var x = stack.head
价值观有许多不同的形式,但处理它们的机制是相同的。例如,考虑以下代码段
中操作+
和 ::
的行为
val x: Int = 41
1 + x
x
// res0: Int = 41
val l: List[Int] = List(41)
1 :: l
l
// res1: List[Int] = List(41)
List(41)
是一个相同意义上的值 41
是一个值,而 res1
仍然是 List(41)
而不是 List(1, 41)
出于同样的原因 res0
仍然是 41
而不是 42
.
将此概念应用于您的代码段(稍微简化后)
val stack: List[Map[String, Int]] = List()
Map() :: stack
stack
// res2: List[Map[String,Int]] = List()
你能看出为什么 res2
仍然是 List()
而不是 List(Map())
吗?