Scala:将元素追加到列表中
我有以下两段代码片段;第一个没有给我带来任何麻烦,但是对于第二个(附加到函数中的列表),我收到一条错误消息。这两个之间有什么区别,如何修复第二个 这个很好用:Scala:将元素追加到列表中,scala,list,collections,Scala,List,Collections,我有以下两段代码片段;第一个没有给我带来任何麻烦,但是对于第二个(附加到函数中的列表),我收到一条错误消息。这两个之间有什么区别,如何修复第二个 这个很好用: object MyApp extends App { var myList = List.range (1, 6) myList ::= 6 println(myList) } 这不起作用: def myFunc(list:List[Int]):Unit = { list ::=
object MyApp extends App
{
var myList = List.range (1, 6)
myList ::= 6
println(myList)
}
这不起作用:
def myFunc(list:List[Int]):Unit =
{
list ::= 10
}
error: value ::= is not a member of List[Int]
list ::= 10
^
one error found
标有
var
的变量是可变的,因此可以重新分配。a::=b
运算符仅由编译器为var
变量提供。它执行操作a=b::a
。以下是一个例子:
scala> var l1 = List(1,2,3)
l1: List[Int] = List(1, 2, 3)
scala> l1 ::= 4
scala> l1
res1: List[Int] = List(4, 1, 2, 3)
scala> val l2 = List(1,2,3)
l2: List[Int] = List(1, 2, 3)
scala> l2 ::= 4
<console>:9: error: value ::= is not a member of List[Int]
l2 ::= 4
^
scala> val l3 = 4 :: l2
l3: List[Int] = List(4, 1, 2, 3)
scala>var l1=List(1,2,3)
l1:List[Int]=List(1,2,3)
scala>l1::=4
scala>l1
res1:List[Int]=List(4,1,2,3)
scala>val l2=List(1,2,3)
l2:List[Int]=List(1,2,3)
scala>l2::=4
:9:错误:值::=不是列表[Int]的成员
l2::=4
^
scala>val l3=4::l2
l3:List[Int]=List(4,1,2,3)
传递的参数是不可变的,因此不能使用
:=
运算符。因此,错误消息“value::=不是列表的成员”是错误的,或者至少没有多大帮助。应该说,类似列表的东西是不可变的,因此不能分配给。我的意思是::并没有突然停止作为一个可以在列表中使用的操作符。我想它可能会更有用,但它并没有错::=
从来都不是列表的元素,但编译器会将其转换为a=b::a
。