У меня есть класс, где мне нравится инициализировать мою переменную, читая файл конфигурации, который создает промежуточные объекты / значения, которые я хотел бы сгруппировать и спрятать в методе.
Вот самый минимум проблемы - я вызываю ctor с параметром i, в действительности это файл для анализа, а метод init генерирует String s, в действительности более сложный, чем здесь, с множеством создаваемых промежуточных объектов :
class Foo (val i: Int) {
var s : String;
def init () {
s = "" + i
}
init ()
}
Это приведет к ошибке: class Foo needs to be abstract, since variable s is not defined
. В этом примере это легко решить, установив для String значение "": var s = "";
, но в действительности объект является более сложным, чем String, без соответствующей реализации Null.
Я знаю, что могу использовать опцию, которая работает для более сложных вещей, чем String:
var s : Option [String] = None
def init () {
s = Some ("" + i)
}
или я могу обойтись без моего метода. Использование опции заставит меня писать некоторые снова и снова, без особой пользы, поскольку нет нужды ни в чем, кроме как инициализировать его так, как я думал.
Есть ли другой способ достичь моей цели?