繁体   English   中英

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

基本上,如果它是空的,则添加一个元素。 为什么脑袋总是空的?

用元素添加列表不会改变列表,它会创建一个新列表,其中包含新元素,后跟原始列表的元素。 在这种情况下,您可以将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM