私は、単一の抽象メソッドを持つ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
と同じ名前にしておきたいと思います。これを行うより良い方法はありますか?
UPDATE:この問題は、TokenizerOneの暗黙のコンストラクタパラメータmodel
が原因であるようです。
私は2.9.1を使用しています。 TokenizerOneクラスの暗黙のコンストラクタ引数を忘れてしまった - 私の謝罪。このコンストラクタ引数を追加すると、問題が発生します。 – schmmd