Вы не опубликовали рабочий код; вы не можете иметь неопределенные переменные.
В любом случае, проблема в том, что даже если вы переопределили конструкторы, вы не переопределили компоновщики в объекте-компаньоне. Добавьте это, и все будет работать так, как вы хотите:
object Client {
def apply(clientNode: NodeSeq) = new Client(clientNode)
def apply(clientList: List[String]) = new Client(clientList)
}
(если вы используете REPL, обязательно введите :paste
, чтобы ввести его вместе с классом дел, чтобы вы добавляли объект-компаньон по умолчанию вместо его замены).
Но более глубокая проблема заключается в том, что это не тот способ, которым вы должны решать проблему. Вы должны определить черту, которая содержит данные, которые вы хотите:
trait ClientData {
def firstName: String
def lastName: String
/* ... */
}
и наследовать от него дважды, один раз для каждого способа его анализа:
class ClientFromList(cl: List[String]) extends ClientData {
val firstName = cl.head
. . .
}
или вы можете превратить NodeSeq в список и проанализировать его там, или другие разные вещи. Таким образом, вы избегаете показа множества переменных, которые, вероятно, не будут изменены позже.