如何为一个参数创建临时别名通过名称函数参数?

  • 本文关键字:参数 别名 函数 创建 一个 scala
  • 更新时间 :
  • 英文 :


注意在下面的代码中,"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)
}

最新更新