これはScalaコンストラクターのオーバーロードに対するフォローアップの質問ですか?コンストラクターをオーバーロードするのではなく、制限された形式の入力で動作し、オーバーライドするケースクラスコンストラクターが必要です。
abstract class Expr
case class RegExpr(regex : Regex) extends Expr {
override def this(regex : Regex) = {
if (regex.toString contains "*")
throw new Exception("Restricted class of regular expressions: cannot contain Kleene star.")
else if (regex.toString contains "|")
throw new Exception("Restricted class of regular expressions: cannot contain disjunction.")
else this(regex)
}
}
これはコンパイルされません。私はこれを数回繰り返してみましたが、それらはすべてコンパイラに戻ってきて、「this」を期待していると言っていますが、代わりに「if」が見つかりました。どうすれば私が望む振る舞いを得ることができますか?