如何在Scala

时间:2017-05-17 03:52:56

标签: scala list parameter-passing call

我正在尝试做以下事情......

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

1 个答案:

答案 0 :(得分:0)

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

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