很抱歉,我甚至不知道如何命名,因为我相信这是一件非常简单的事情。
我有一个函数,它将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)
?
在这种情况下,什么是正确的解决方案?
我非常感谢你有时间帮助我。
答案 0 :(得分:1)
您在+:
上调用的方法List
会返回一个前缀为元素的新列表。原始列表未被修改。
在语句l2.+:(1)
中,您忽略了返回值(带有前置元素的新列表)。然后,您返回l2
,该List
仍然引用包含两个元素1
和2
的原始{{1}}。
答案 1 :(得分:0)
您错过了一项任务(您可能需要i
代替1
):l2 +:= i
。
但在scala中,最好避免使用var
:
def a(i: Int) = { i :: List(1, 2) }
(我猜你的方法要复杂得多,但几乎总是可以用这种方式重写它)