[英]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
基本上,如果它是空的,则添加一个元素。 为什么脑袋总是空的?
用元素添加列表不会改变列表,它会创建一个新列表,其中包含新元素,后跟原始列表的元素。 在这种情况下,您可以将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())
吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.