dụ:Làm thế nào để nhanh chóng một thể hiện của loại đại diện bởi tham số gõ vào Scala
import scala.actors._
import Actor._
class BalanceActor[T <: Actor] extends Actor {
val workers: Int = 10
private lazy val actors = new Array[T](workers)
override def start() = {
for (i <- 0 to (workers - 1)) {
// error below: classtype required but T found
actors(i) = new T
actors(i).start
}
super.start()
}
// error below: method mailboxSize cannot be accessed in T
def workerMailboxSizes: List[Int] = (actors map (_.mailboxSize)).toList
.
.
.
Lưu ý các lỗi thứ hai cho thấy rằng nó biết các mục diễn viên là "T" s, nhưng không phải là chữ "T" là một lớp con của tác nhân, như bị ràng buộc trong định nghĩa chung của lớp.
Mã này có thể được sửa chữa để hoạt động như thế nào (sử dụng Scala 2.8)?
... quên đề cập đến, tôi đang sử dụng plugin Eclipse Scala (2,8 đêm) cho điều này ... –
Vẫn gặp lỗi trên "phương thức mailboxSize không thể truy cập trong T", mặc dù sử dụng fac () chức năng được truyền vào như bạn gợi ý. Tôi ngạc nhiên bởi kết quả này, vì trình biên dịch biết rằng T là <: Diễn viên, và diễn viên đó có .mailboxSize (được truy cập trong cùng lớp BalanceActor), tôi tự hỏi nếu đây là lỗi trong phiên bản cụ thể của 2,8 đêm tôi đang sử dụng ??? Không nên truy cập vào biên dịch .mailboxSize, như bạn đã tự tuyên bố? Bạn đã có một cái gì đó tương tự như làm việc, có lẽ trên các plugin Eclipse 2.7.5.final, hoặc biên dịch scalac độc lập? –
Nhờ cả oxbow_lakes và Walter Chang để cung cấp các giải pháp khác nhau, nhưng cả hai hoàn toàn khả thi, cho vấn đề instantiation. –