Я знаю, что внутри класса, использующего lazy val, используется какой-то тип двойной блокировки. Но как насчет определения функции? Используется ли тот же шаблон?
Например:
class Sample {
def computation(): Something = {}
def fn(compute: Boolean, default: Something): Something = {
lazy val c = computation()
if (compute) c*c else default
}
}