2016-01-20 35 views
0

對不起,我甚至不知道如何命名一個標題,因爲我相信這是一個死的簡單的事情。斯卡拉,集合,可變訪問範圍

我有一個正在詮釋作爲參數,並返回一個int列表功能(增加值,爲int槽循環結束後,和幾個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

請在SO上發佈時使用標記,並從您的代碼中刪除不必要的東西,因此它可以被複制粘貼爲 – Archeg

回答

0

您錯過了一項任務(並且您的意思可能是i而非1):l2 +:= i

但在Scala中最好避免使用var

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

(我猜你的方法要複雜得多,但它幾乎總是能夠重寫它的方式)

1

的方法+:您打電話給List會返回一個新的列表,其中包含前面的元素。原始列表未被修改。

在語句l2.+:(1)中,您忽略了返回值(帶有元素前置的新列表)。然後你返回l2,它仍然指代包含12這兩個元素的原始List