2017-05-17 60 views
1

我嘗試做以下...如何調用作爲參數傳遞的列表在斯卡拉

我定義爲RefInt類和方法refInt5應採取引用的ListRefInt實例。

我需要以這種方式更改參數,以便調用者可以看到它。

object argpass { 

    class RefInt (initial : Int) { 
    private var n : Int = initial 
    def get() : Int = n 
    def set (m : Int) : Unit = { n = m } 
    } 

    def refint5 (xs : List[RefInt]) : Unit = { 

    // What am I missing to modify RefInt(s)? 

    } 
} 

測試代碼我必須看看參數是否已經改變。

property ("EX05 - refint5", EX (5)) { 
    val rand = scala.util.Random 
    val xs : List[Int] = (1 to 5).toList.map (x => rand.nextInt (100)) 
    val ys : List[RefInt] = xs.map (x => new RefInt (x)) 
    refint5 (ys) 
    var changed = false 
    for ((x, r) <- xs.zip (ys)) { 
     if (x != r.get) { 
     changed = true 
     } 
    } 
    if (!changed) { 
     throw new RuntimeException ("xs is unchanged!") 
    } 
    } 
} 
+0

變化是什麼說法?你有'xs',你想用'RefInt'(s)的'List'做什麼? –

+0

這是沒有指定的,我所要做的就是改變參數,使其對調用者可見。 有這個測試代碼,我運行它只是檢查xs是否被改變,如果沒有,它會引發runtimeexception錯誤。 –

+1

屬性(「EX05 - refint5」,EX(5)){ val rand = scala.util.Random val xs:List [Int] =(1 to 5).toList.map(x => rand.nextInt (y,y) var changed = false ((x,r)< - xs.zip(ys)) )){ 如果(X!= r.get){ 改變=真 }} 如果 (!改變){ 拋出新的RuntimeException( 「XS是不變的!」) }} } 有時 –

回答

0

一種可能的選擇:迭代xs,呼籲set每個元素 - 獲取當前值 - 增加1

def refint5(xs: List[RefInt]): Unit = { 
    xs.foreach { x => x.set(x.get + 1) } 
} 
+0

我喜歡過度揣測事物太多... 這工作,並感謝您幫助我的智力路障時刻。謝謝你們! –