gpt4 book ai didi

scala - Scala 中定义函数的三种方式之间的差异

转载 作者:行者123 更新时间:2023-12-03 04:58:27 26 4
gpt4 key购买 nike

给出表达同一函数的三种方式f(a) := a + 1:

val f1 = (a:Int) => a + 1
def f2 = (a:Int) => a + 1
def f3:(Int => Int) = a => a + 1

这些定义有何不同? REPL 没有表明任何明显的差异:

scala> f1
res38: (Int) => Int = <function1>
scala> f2
res39: (Int) => Int = <function1>
scala> f3
res40: (Int) => Int = <function1>

最佳答案

在类内部,val 在初始化时求值,而 def 仅在调用函数时和每次求值。在下面的代码中,您将看到第一次使用对象时对 x 进行求值,但在访问 x 成员时不再求值。相反,y 在对象实例化时不求值,而是在每次访问成员时求值。

  class A(a: Int) {
val x = { println("x is set to something"); a }
def y = { println("y is set to something"); a }
}

// Prints: x is set to something
val a = new A(1)

// Prints: "1"
println(a.x)

// Prints: "1"
println(a.x)

// Prints: "y is set to something" and "1"
println(a.y)

// Prints: "y is set to something" and "1"
println(a.y)

关于scala - Scala 中定义函数的三种方式之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3646756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com