Извиняюсь за запутанный заголовок, не знал, как это выразить лучше.Это продолжение перегрузки в Scala при использовании параметров типа
Вот неисправный код:
def parser[T](identifier: String, default: T, modifier: String => T): T = {
val l = args.filter(_.toLowerCase.startsWith(identifier.toLowerCase))
println("l:")
println(l.isEmpty)
if(l.isEmpty) default
else modifier(l(0).drop(identifier.length).trim)
}
val installation: String = parser("-installation", {throw new Error("Installation not specified")}, identity)
Этот код находится в основной функции,поэтому аргументы - это обычный список аргументов.Если я передам аргумент -installation asdf, произойдет следующее: ошибка выдается до того, как программа может перейти в метод синтаксического анализатора (это происходит потому, что в консоли не выводится «l: false», поэтому код никогда не достигается.) Я считаю, что исключение выдается при оценке блока
{throw new Error("Installation not specified")}
.Я предполагаю, что Scala оценивает этот блок, чтобы узнать, какое значение передать методу.Есть ли способ отложить оценку до тех пор, пока он фактически не достигнет этого бита кода внутри синтаксического анализатора?
Я пытался использовать ленивое значение, например:
lazy val error = {throw new Error("Installation not specified")}
val installation: String = parser("-installation", error , identity)
, но этотоже не работает.