Если вам нужно установить одно значение из двух других значений, это, вероятно, не «установщик». Подумайте над тем, чтобы придать этой операции осмысленное имя или убрать ее из этого класса.
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)
Что более или менее аналогично обычным кортежам, однако, семантика сеттера не искажена.
В случае, если его внутренние операции могут выглядеть следующим образом:
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)