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!")
}
}
}
ändern, was Argument? Sie haben 'xs', was möchten Sie mit Ihrer' Liste' von 'RefInt' (s) machen? –
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. –
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!") } } } –