2016-02-22 2 views
3

Есть ли способ перегрузить конструктор не только с одним конструктором? Похоже, что добавление более одного оператора в перегруженный конструктор дает ошибку Application does not take parameters. Например, если основной конструктор взять String, следующие будут работать:Scala: Можете ли вы перегрузить конструктор более чем одним конструктором?

def this(num: Int) = { 
    this(num.toString()) 
} 

Следующие, однако, не будет:

def this(num: Int) = { 
    val numAsString = num.toString() 
    this(numAsString) 
} 
+0

Возможно, релевантный вопрос: http://stackoverflow.com/questions/2400794 – socom1880

+0

Почему «val hi» будет первой линией? Вы всегда можете сделать супервызов первым утверждением. Можете ли вы рассказать о своем примере. Неясно, чего вы пытаетесь достичь. –

+1

s/может всегда/всегда, вызов s/super call/self constructor. 'Выражение конструктора является либо вызовом self constructor this (args1) ... (argsn), либо блоком, который начинается с вызова self constructor. ' –

ответ

2

Вы можете переписать следующим образом:

def this(num: Int) = 
    this{ 
    val numAsString = num.toString 
    numAsString 
    } 
+0

Можно ли вызвать конструкторы с несколькими параметрами? Например. можно написать 'this (num.toString, num.toString)' только с одним вызовом 'toString'? – Bergi

+0

Нет. См. Http://stackoverflow.com/a/14210930/86485 для более полного обсуждения этого вопроса. –

+0

Спасибо, что очищает все - ведь фабрика (без «нового») все равно выглядит чище. Кстати, разве это не точный дубликат? – Bergi

Смежные вопросы