我可以在setter中使用多个参数吗?
例如:
private var _a = 0
def a = _a
def a_= (b: Int, c: Int) = _a = b + c
如果是,我该如何调用setter方法?
答案 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)