【发布时间】:2009-08-20 11:34:58
【问题描述】:
示例:
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
.
.
.
请注意,第二个错误表明它知道参与者项是“T”,但不知道“T”是参与者的子类,如类通用定义中所限制的那样。
如何更正此代码以使其正常工作(使用 Scala 2.8)?
【问题讨论】:
-
...忘了提一下,我为此使用了 Eclipse Scala 插件(每晚 2.8)...
-
尽管按照您的建议使用了传入的 fac() 函数,但仍然收到“无法在 T 中访问方法邮箱大小”的错误。我对这个结果感到惊讶,因为编译器知道 T 是 <: actor .mailboxsize balanceactor eclipse scalac>
-
感谢 oxbow_lakes 和 Walter Chang 为实例化问题提供了不同但可行的解决方案。
标签: scala generics type-parameter