如何在 Scala 中调用作为参数传递的列表

How to call list passed as argument in Scala

我正在尝试执行以下操作...

我有一个 class 定义为 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!")
    }
  }
}

一个可能的选项:迭代 xs,为每个元素调用 set - 获取当前值 - 加 1。

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