想象一下,我有一個帶有單個抽象方法的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