如何在 Scala 中调用作为参数传递的列表
How to call list passed as argument in Scala
我正在尝试执行以下操作...
我有一个 class 定义为 RefInt
和一个方法 refInt5
应该采用 List
对 RefInt
实例的引用。
我需要以这种方式更改参数,以便它对调用者可见。
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!")
}
}
}
一个可能的选项:迭代 xs
,为每个元素调用 set
- 获取当前值 - 加 1。
def refint5(xs: List[RefInt]): Unit = {
xs.foreach { x => x.set(x.get + 1) }
}
我正在尝试执行以下操作...
我有一个 class 定义为 RefInt
和一个方法 refInt5
应该采用 List
对 RefInt
实例的引用。
我需要以这种方式更改参数,以便它对调用者可见。
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!")
}
}
}
一个可能的选项:迭代 xs
,为每个元素调用 set
- 获取当前值 - 加 1。
def refint5(xs: List[RefInt]): Unit = {
xs.foreach { x => x.set(x.get + 1) }
}