关于scala构造函数开发的后续工作

eto*_*sch 0 constructor overriding scala case-class

这是Scala构造函数重载的后续问题我想要一个case类构造函数,它在输入的受限形式上运行,因此覆盖,而不是重载构造函数:

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)
  }
}
Run Code Online (Sandbox Code Playgroud)

这不编译; 我已经尝试了几次不同的迭代,但他们都回到编译器告诉我它期望'这',但是'if'被找到了.我如何得到我想要的行为?

Did*_*ont 5

不需要两个构造函数.只需在班级中添加支票,它们将在施工时运行.

case class RegExpr(regex: Regex) extends Expr {
   if (regex.toString contains "*") throw ...
   if (regex.toString contains "|") throw ...


}
Run Code Online (Sandbox Code Playgroud)

  • `require(!regex.toString.contains("*"),"...")`是更惯用的参数测试. (3认同)