Вы можете передать lazy val
по имени:
lazy val requiredParameterObject = new Foo {
val a = new ...
val b = new ...
// etc
}
class C {
def someFunction(f: => Foo) {
f //(1)
}
}
val collection = List(new C, new C)
for (a <- collection) a.someFunction(requiredParameterObject)
В приведенном выше коде Foo
создается один раз, когда первый элемент коллекции обращается к нему в (1
), или никогда, если коллекция пуста.
Вы также можете получить лучшие результаты, если requiredParameterObject
- обычная функция, эффективно вызывающая requiredParameterObject
только тогда, когда это необходимо. Однако он будет вызывать столько раз, сколько элементов в коллекции.