У меня есть класс, где мне нравится инициализировать мой var, читая конфигурационный файл, который создает промежуточные объекты /vals, которые я хотел бы сгруппировать и скрыть в методе. Ниже приведена минимальная проблема: я вызываю ctor с параметром i, на самом деле File для синтаксического анализа, а 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-реализации.
Я знаю, я могу использовать Option, который работает и для более сложных вещей, чем String:
var s : Option [String] = None
def init () {
s = Some ("" + i)
}
или я могу обойтись без моего метода. Использование опции заставит меня писать некоторые снова и снова, без особой пользы, так как нет необходимости в Ничем другом, кроме как инициализировать его так, как я думал.
Есть ли другой способ достижения моей цели?