Genellikle bir özellik için bir fabrika yöntemine sahip olduğum ve karşıtların adlarının gizli kalmasına neden olan özellik üyeleriyle çakıştığı durumla karşılaşıyorum:Scala - anonim sınıf oluşturma ve bağımsız değişken adlarının gizlenmesini önleme
argümanlardandef apply(aA: Int, bB: String): MyTrait = new MyTrait {
val a = aA
val b = bB
}
veya yapmak yerel kopya:
def apply(a: Int, b: String): MyTrait = {
val localA = a
val localB = b
new MyTrait {
val a = localA
val b = localB
}
trait MyTrait {
val a: Int
val b: String
}
object MyTrait {
def apply(a: Int, b: String): MyTrait = new MyTrait {
val a = a // Recursive infinite loop.
val b = b
}
}
Yani genelde ben gibi çirkin bir şey yapmak zorunda 0
apply
yönteminin parametreleri benim özelliğimin üyeleriyle aynı olmasını istiyorum, böylece istemci kodu, adlandırılmış parametreler kullandığımda güzel okur: ör. MyTrait(a=3,b="123")
.
Argüman parametrelerinin tanımlandığı dış kapsamı yakalamamı sağlayan bir netleme mekanizması var mı, ancak anonim sınıf henüz yok mu? Örneğin bir şey gibi:
def apply(a: Int, b: String): MyTrait = { outer =>
new MyTrait {
val a = outer.a
val b = outer.b
}
}
Teşekkürler!
Yinelenen http://stackoverflow.com/q/ 12229005/1296806 –