Из того, что я видел, компилятор Scala вообще не оптимизирует это.JVM может, если сможет определить, что результаты не изменятся, но часто у нее нет хорошего способа узнать.
Так что, как правило, если это тривиальное вычисление, это не имеет значения,и потому, что это тривиально, и потому что JVM может понять, что ему нужно сделать это только один раз.Если это сложно, а скорость важна, вы должны использовать метод val a =
, если у вас нет тестов, демонстрирующих, что JVM достаточно умна в этом случае.
Обратите внимание, что иногда неудобно размещать значения,Есть два способа обойти это.Во-первых, обратите внимание, что почти все может быть заменено эквивалентным выражением в фигурных скобках, поэтому исключения могут встречаться реже, чем вы думаете.Также этот метод может быть полезен при определенных обстоятельствах:
def reuse[A,B](a: A)(f: A => B) = f(a)
reuse(add(1,2))( a => { do_something(a); do_another_thing(a)})