gpt4 book ai didi

scala - 为什么 `def aPlusOne = a + 1` 和 `val aPlusOne = () => a + 1` 在 Scala 中不同?

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

这个问题在这里已经有了答案:





Difference between method and function in Scala

(9 个回答)


12 个月前关闭。




我希望以名称保存一个函数并在需要时对其进行评估。在 JavaScript 中,它可能是这样的,而无需使用匿名函数。

let a = 5
function aPlusOne() {
return a + 1
}
let func = aPlusOne
a = 6
result = func() // which gives us 7
我的问题是如何在 Scala 中做到这一点 ?
scala> var a = 7

scala> def aPlusOne = a + 1
aPlusOne: Int

scala> var myFunc2 = aPlusOne
myFunc2: Int = 8 // OK, 7 + 1

scala> myFunc2
res3: Int = 8

scala> a = 9
a: Int = 9

scala> myFunc2
res4: Int = 8 // shall be 9 + 1 = 10
我们第二次打电话 myFunc2 ,它返回 8 而不是 9 + 1,也就是 10。所以在我们创建它时它被评估了。
我想知道是否有办法只保存函数而不是评估值。
如果不清楚,我想在不使用 Lambda 的情况下做这样的事情
scala> val myLambda = () => a + 1
myLambda: () => Int = <function0>

scala> myLambda()
res2: Int = 8

scala> a = 9
a: Int = 9

scala> myLambda()
res3: Int = 10
或者说 def aPlusOne = a + 1有什么区别和 val aPlusOne = () => a + 1 ?为什么会有区别,因为在其他语言中它们可以像函数一样使用?

最佳答案

scala> var a = 4 //mutable variable (bad, bad, bad)
a: Int = 4

scala> def aPlusOne = a + 1 //a method
aPlusOne: Int

scala> val f = aPlusOne _ //a function via eta-expansion
f: () => Int = $$Lambda$1762/0x0000000840820840@7e3f9be9

scala> f() //invoke function
res1: Int = 5

scala> a = 2 //reset a
a: Int = 2

scala> f() //yep, it works
res2: Int = 3
方法和功能的区别? You're not the first to ask.

关于scala - 为什么 `def aPlusOne = a + 1` 和 `val aPlusOne = () => a + 1` 在 Scala 中不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63664184/

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