Scala,集合,可变访问范围

时间:2016-01-20 13:56:13

标签: scala collections

很抱歉,我甚至不知道如何命名,因为我相信这是一件非常简单的事情。

我有一个函数,它将Int作为一个参数并返回Ints列表(在通过循环添加值之后,将if语句结合起来。签名是必须的)

我的问题:

def a(i:Int) = { var l2 = List(1,2); l2.+:(1); l2; }
println(a(3)) // outputs List(1, 2)

为什么函数a返回List(1,2)而不是List(3,1,2)? 在这种情况下,什么是正确的解决方案? 我非常感谢你有时间帮助我。

2 个答案:

答案 0 :(得分:1)

您在+:上调用的方法List会返回一个前缀为元素的新列表。原始列表未被修改。

在语句l2.+:(1)中,您忽略了返回值(带有前置元素的新列表)。然后,您返回l2,该List仍然引用包含两个元素12的原始{{1}}。

答案 1 :(得分:0)

您错过了一项任务(您可能需要i代替1):l2 +:= i

但在scala中,最好避免使用var

def a(i: Int) = { i :: List(1, 2) }

(我猜你的方法要复杂得多,但几乎总是可以用这种方式重写它)