【问题标题】:Scala: Appending an Element to a ListScala:将元素附加到列表
【发布时间】:2017-06-23 17:16:37
【问题描述】:

我有以下2个代码sn-ps;第一个没有给我带来麻烦,但是对于第二个(附加到函数中的列表),我收到一条错误消息。这两个有什么区别,我该如何解决第二个?

这个很好用:

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

【问题讨论】:

    标签: scala list collections


    【解决方案1】:

    标有var 的变量是可变的,因此可以重新分配。 a ::= b 运算符只是由编译器var 变量 提供的syntactic sugar。它执行操作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)
    

    传递的参数不可变,因此不能使用::= 运算符。

    【讨论】:

    • 因此,错误消息“value ::= is not a member of List”是错误的,或者至少没有帮助。应该说 list 之类的东西是不可变的,因此不能分配给。我的意思是 :: 并没有突然停止成为可以在 List 上使用的运算符。
    • 我想它可能更有用,但它并没有错。 ::= 绝不是List 的元素,但它会被编译器翻译成a = b :: a
    猜你喜欢
    • 2014-06-10
    • 2020-09-02
    • 2013-02-10
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多