Ayarlayıcılarda birden fazla parametre kullanabilir miyim? ÖrneğinScala belirteçleri - çoklu parametre
:
private var _a = 0
def a = _a
def a_= (b: Int, c: Int) = _a = b + c
evet, ben ayarlayıcı yöntemini çağırabilirsiniz nasıl?
Ayarlayıcılarda birden fazla parametre kullanabilir miyim? ÖrneğinScala belirteçleri - çoklu parametre
:
private var _a = 0
def a = _a
def a_= (b: Int, c: Int) = _a = b + c
evet, ben ayarlayıcı yöntemini çağırabilirsiniz nasıl?
Bir tuple nedir? Eğer garip tuple erişim sözdizimi beğenmezseniz
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
}
}
}
Kullanımı: Eğer diğer iki değerlerden tek bir değeri ayarlamak gerekiyorsa
val x = new A()
x.a = (3, 7)
x.a //10
Bunun nasıl çağrıldığına dair bir örnek var mı? (Hiç bu kadar güzel çalışmam mümkün olmamıştı ... en azından şu anda [2.8].) –
@pst: bir örnek ekledi, işe yaradıyor (?) –
İlerlemeden kurtulun :) –
muhtemelen değil 'setter'. Bu işleme anlamlı bir isim vermeyi veya bu sınıftan çıkarmayı düşünün.
private var _s: Whatever = // init
def s_=(newValue: Whatever): Unit = _setter = newValue
...
implicit def t2whatever(t: (SomeTypeA, SomeTypeB)): Whatever = // some logic here
şimdi bizim setter ancak ayarlayıcı anlamsal ezilmiş değildir düz küpe gibi az ya da çok aynı
obj.setter = sta -> stb
// or
obj.setter = (sta, stb)
diyoruz cal.
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)
}
ve sonra
obj.s = Z.toS(1, 2)
Teşekkürler. Setter semantiğinin değiştirilebileceğini anlıyorum, ama bazen o sette küçük bir kodda kullanıyorum ve bu kodu başka bir nesneye ya da sınıfa ayırmazsam daha kolay görünüyor. –
Tuples iyidir: kendi iç operasyonlar durumda
gibi görünebilir. Ayrıca, 'update()' yöntemini kullanmayı düşünün, ör. def güncelleme (p1: T1, p2: T2, p3: T3, v: V) 'sonra yazabilirsiniz' obj (p1, p2, p3) = v' – tuxSlayer
Ve evet, yine de buna 'obj.a_ diyebilirsiniz = (1, 2) 'fakat muhtemelen bir 'ayarlayıcı' değil;) – tuxSlayer