2017-05-17 2 views
1

Ich versuche, die folgenden ...Wie Liste als Argument übergeben nennen in Scala

Ich habe eine Klasse als RefInt und ein Verfahren refInt5 definiert zu tun, die ein List von Verweisen auf Instanzen von RefInt nehmen sollen.

Ich muss das Argument so ändern, dass es für den Aufrufer sichtbar wird.

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)? 

    } 
} 

Der Testcode muss ich sehen, wenn das Argument geändert hat.

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

ändern, was Argument? Sie haben 'xs', was möchten Sie mit Ihrer' Liste' von 'RefInt' (s) machen? –

+0

Dies ist nicht angegeben, alles, was ich angewiesen habe, ist, das Argument so zu ändern, dass es für den Anrufer sichtbar ist. Es gibt diesen Testcode, den ich ausführe, der gerade überprüft, um zu sehen, ob Xs geändert wird oder nicht, wenn es nicht einen runtimeexception Fehler wirft. –

+1

Eigenschaft ("EX05 - refint5", EX (5)) { val rand = skala.util.Random val xs: Liste [Int] = (1 bis 5) .toList.map (x => rand.nextInt (100)) val ys: Liste [RefInt] = xs.map (x => neuer RefInt (x)) refint5 (ys) var geändert = false für ((x, r) <- xs.zip (ys)) { if (x! = r.get) { geändert = true } } if (! geändert) { throw new Runtime ("xs unverändert ist!") } } } –

Antwort

0

Eine mögliche Option: Iterate xs, für jedes Element set nennen - den aktuellen Wert erhalten - hinzufügen 1.

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

Manchmal I Dinge zu sehr überdenken ... Das hat funktioniert, und ich danke Ihnen, dass Sie mir bei meinem geistigen Block geholfen haben. Vielen Dank ein Haufen! –

Verwandte Themen