Scala setters - 多个参数

时间:2012-02-20 18:42:07

标签: scala parameters setter

我可以在setter中使用多个参数吗?

例如:

private var _a = 0
def a = _a
def a_= (b: Int, c: Int) = _a = b + c

如果是,我该如何调用setter方法?

2 个答案:

答案 0 :(得分:9)

元组怎么样?

class A {
  private var _a = 0
  def a = _a
  def a_= (t: (Int, Int)) {
    _a = t._1 + t._2
  }
}

如果您不喜欢笨拙的元组访问语法:

class A {
  private var _a = 0
  def a = _a
  def a_= (t: (Int, Int)) {
    t match {
      case(b, c) => _a = b + c
    }
  }
}

用法:

val x = new A()
x.a = (3, 7)
x.a  //10

答案 1 :(得分:1)

如果您需要从其他两个值设置单个值,则可能不是“设置者”。考虑给这个操作一个有意义的名字或将它移出这个类。

private var _s: Whatever = // init 
def s_=(newValue: Whatever): Unit = _setter = newValue
...
implicit def t2whatever(t: (SomeTypeA, SomeTypeB)): Whatever = // some logic here

现在我们打电话给我们的二传手

obj.setter = sta -> stb
// or
obj.setter = (sta, stb)

这与普通元组大致相同,但是setter语义不会被破坏。

如果其内部操作可能如下:

class Z {
  private var _s = // init

  def s = _s
  def s_=(newValue: S) = _s = newValue
}

object Z {
  def toS(a: S, b: S): S = ChineseZodiac.choose(0.14 * a, math.PI + b)
}

然后

obj.s = Z.toS(1, 2)