Notice in the following code, "Hello" is printed twice in test1()
but only once in test2()
.
Assuming I can't change change f()
and g()
, how can I change test2()
so it behaves like test1()
, whilst retaining the ability to give the expression an alias (in this case x
)?
Basically I'm looking for a transformation from test1()
to something like test2()
that doesn't change the meaning of the code in anycase.
object Main extends App {
println("test1")
println(test1())
println("test2")
println(test2())
def test1() : Int = {
f(g())
}
def test2() : Int = {
lazy val x = g()
f(x)
}
def g() : Int = {
println("Hello")
42
}
def f(x: => Int) : Int = {
x * x
}
}
CodePudding user response:
Just use def
rather than val
:
def test2(): Int = {
def x = g()
f(x)
}