пример:Как создается экземпляр типа, представленного параметром типа в 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
.
.
.
Примечание вторая ошибка показывает, что он знает элементы актера являются «Т» с, но не о том, что «Т» подкласс актера, как ограниченный в определении общего класса.
Как этот код может быть исправлен для работы (с использованием Scala 2.8)?
... забыли упомянуть, я использую плагин Eclipse Scala (2,8 ночи) для этого ... –
По-прежнему получать сообщение об ошибке «метод mailboxSize не может быть доступен в T», несмотря на использование фрейма () funtion прошел, как вы предложили. Я удивлен этим результатом, поскольку компилятор знает, что T является <: Actor, и что у Актера есть .mailboxSize (доступ к нему в пределах того же класса BalanceActor, как показано) Мне интересно, является ли это ошибкой в конкретной версии 2,8 ночи я использую ??? Должен ли доступ к компиляции .mailboxSize, как вы сами заявили? У вас есть что-то похожее на работу, возможно, на плагин 2.7.5.final Eclipse или автономную компиляцию скаляра? –
Благодаря как oxbow_lakes, так и Walter Chang для предоставления различных, но и работоспособных решений для проблемы создания экземпляров. –