Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Scala空列表头_List_Scala_Dictionary_Interpreter - Fatal编程技术网

List Scala空列表头

List Scala空列表头,list,scala,dictionary,interpreter,List,Scala,Dictionary,Interpreter,我想获得我的第一个元素: var stack = List[Map[String, ExpValue]]() 尽管我这样做了,但我怎么可能总是得到一个错误,即它是空的: if (stack.isEmpty) { var new_map:Map[String, ExpValue] = Map(); new_map::stack;} var x = stack.head 基本上,如果为空,则添加一个元素。 为什么head总是空的?在列表前面加上元素不会改变列表,它会创建一个新的列表,其中包含

我想获得我的第一个元素:

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\u 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

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

将此概念应用于代码段(在稍微简化之后)


你能理解为什么
res2
保留
List()
而不是
List(Map())

值有许多不同的形状,但处理它们的机制是相同的。例如,考虑以下操作代码< >代码> +<代码> > <代码>::/>代码>下面的代码段

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

将此概念应用于代码段(在稍微简化之后)


你能明白为什么
res2
保留
List()
而不是
List(Map())

不,你没有。您创建了一个由
new\u map
和上一个堆栈组成的新值,并将其丢弃。列表是不可变的,您不能修改它们,无论您是否填写了所有不必要的
变量的代码。我建议您学习更多关于该语言的知识,您可以通过以下方法解决所有问题:
stack.headOption.getOrElse(默认值=Map.empty[String,ExpValue])
非常感谢@路易斯米盖尔梅杰·亚苏亚雷斯,你没有。您创建了一个由
new\u map
和上一个堆栈组成的新值,并将其丢弃。列表是不可变的,您不能修改它们,无论您是否填写了所有不必要的
变量的代码。我建议您学习更多关于该语言的知识,您可以通过以下方法解决所有问题:
stack.headOption.getOrElse(默认值=Map.empty[String,ExpValue])
非常感谢@路易斯米盖尔梅杰亚斯亚雷斯