2012-12-11 54 views
0

這是一個後續問題要Scala constructor overload?我想的是,輸入等覆蓋的限制形式運行的情況下類的構造函數,而不是重載的構造器:隨訪約斯卡拉構造oveloading

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'被找到。我如何得到我想要的行爲?

回答

5

不需要兩個構造函數。只需在班級內添加支票,他們將在施工時間運行。

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


} 
+0

太好了,謝謝!這似乎改善了事情。 – etosch

+3

'require(!regex.toString.contains(「*」),「...」)'是更慣用的參數測試。 – senia

+0

此外,最後的其他是不必要的。 – yakshaver