Хотя решение didierd решает объявленную проблему и в некоторой степени близко к этому, оно все равно не решает проблему, когда вам нужно выполнить несколько операторов перед вызовом this
.Этот предоставляет общий подход ко всем сценариям:
class SearchData(xml: Node) {
def this(url: URL) = this {
println(url)
try {
XML.load(url)
} catch {
case _ => <results/>
}
}
}
Хитрость в том, что this
подается в результате выполнения анонимной функции, в теле которой вам разрешено делать все что угодно.
Но это работает только тогда, когда у вас есть главный конструктор с одним аргументом - в других сценариях вам придется вводить обходной путь на основе Tuple
:
class SearchData(xml: Node, valid: Boolean) {
def this(url: URL) = this {
println(url)
try {
(XML.load(url), true)
} catch {
case _ => (<results/>, false)
}
}
def this(t: (Node, Boolean)) = this(t._1, t._2)
}