想象一下,我有一个带有单个抽象方法的Tokenizer类。扩展一个类,每个类都有很多实现,每个实现都有Scala中的主要方法
trait Tokenizer {
def tokenize(sentence: String): List[String]
}
我将实现一些提供实现的标记器。我希望每个Tokenizer都有一个主要的方法。我首先想到的是写这样的代码:
abstract class TokenizerMain(tokenizer: Tokenizer) {
def main(args: Array[String]) = println(tokenizer.tokenize(args(0)).mkString(" "))
}
class TokenizerOne(val model: String = "foo") extends Tokenizer {
def tokenize(sentence: String) = List("asdf")
}
object TokenizerOne extends TokenizerMain(new TokenizerOne) {
}
但是,我得到的错误“超级构造函数不能被传递一个自我引用,除非参数是通过名称声明”。我可以将object TokenizerOne
重命名为object TokenizerOneMain
,但我想保留它与class
相同。有一个更好的方法吗?
更新:此问题似乎是由TokenizerOne的隐式构造函数参数model
造成的。
我正在使用2.9.1。我忘记了TokenizerOne类的隐式构造函数参数 - 我的歉意。随着这个构造函数参数的增加,问题就会发生。 – schmmd