Tôi thường gặp phải tình huống mà tôi có phương pháp nhà máy đối với một số đặc điểm và tên đối số xung đột với các thành viên của đặc điểm khiến chúng bị ẩn:Scala - cách tạo lớp ẩn danh và tránh ẩn tên đối số
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
}
}
Vì vậy, thường tôi phải làm một cái gì đó xấu xí như:
def apply(aA: Int, bB: String): MyTrait = new MyTrait {
val a = aA
val b = bB
}
hoặc làm bản sao cục bộ của đối số:
def apply(a: Int, b: String): MyTrait = {
val localA = a
val localB = b
new MyTrait {
val a = localA
val b = localB
}
Tôi muốn các tham số cho phương thức apply
giống với các thành viên của đặc điểm của tôi, để mã khách hàng đọc độc đáo khi tôi sử dụng các tham số được đặt tên: ví dụ: MyTrait(a=3,b="123")
.
Có cơ chế neater cho phép tôi nắm bắt phạm vi bên ngoài nơi các tham số đối số được xác định hay không, nhưng lớp ẩn danh chưa? Ví dụ:
def apply(a: Int, b: String): MyTrait = { outer =>
new MyTrait {
val a = outer.a
val b = outer.b
}
}
Cảm ơn!
Duplicate http://stackoverflow.com/q/ 12229005/1296806 –