注意在下面的代码中,"Hello"在test1()
中打印两次,而在test2()
中只打印一次。
假设我不能改变改变f()
和g()
,我怎么能改变test2()
,使它的行为像test1()
,同时保留给表达式一个别名的能力(在这种情况下x
)?
基本上我正在寻找从test1()
到test2()
的转换,在任何情况下都不会改变代码的含义。
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
}
}
使用def
而不是val
:
def test2(): Int = {
def x = g()
f(x)
}