我想获得我的第一个要素:
var stack = List[Map[String, ExpValue]]()
尽管这样做,我怎么可能总是会得到一个空的错误:
if (stack.isEmpty) {
var new_map:Map[String, ExpValue] = Map();
new_map::stack;}
var x = stack.head
基本上为空时,添加一个元素。为什么头总是空的?
您需要将结果分配给您的堆栈变量:
var stack = List[Map[String, String]]()
if (stack.isEmpty) {
var new_map: Map[String, String] = 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
。] >