gpt4 book ai didi

scala - 为什么在这个 Scala 方法定义中有两组参数/括号?

转载 作者:行者123 更新时间:2023-12-03 08:30:32 26 4
gpt4 key购买 nike

我是 Scala 的新手,正在阅读一些关于 ScalaSTM 的资料。

如果有人可以简单地命名下面的概念,我将不胜感激,其中有两组括号被传递给该方法。:

def transfer(amount: Int, a: Ref[Int], b: Ref[Int])(c: Transaction) {
a.:=(a.get(c) - amount)(c)
b.:=(b.get(c) + amount)(c)
}
c: Transaction 中使用了什么概念?

一旦我知道我在寻找什么,我会进一步阅读!

谢谢

最佳答案

这被命名为 Currying .柯里化(Currying)函数的类型为 A => B => C。

函数def foo(a: A, b: B): C类型为 (A, B) => C .
另一方面,函数 def curriedFoo(a: A)(b: B): C类型为 A => B => C .使用 curried 函数,您可以执行 def curriedFooWithA = curriedFoo(a)类型为 B => C .您不必一次性提供所有论点。

因此,在您的情况下,您可以提供 amount , a , 和 b .您将获得一个函数,该函数采用 Transaction .另一种情况是 Request => DataBase => Int 类型的函数。 ,您只需提供 Request ,最后当你真的需要运行请求时,提供 DataBase请求必须发送到的位置。

类型(A, B) => CA => B => C是同构的。 Scala 提供 tupleduncurried就是这样做的。
def curriedFoo(a: A)(b: B): C = a => b => foo(a, b)def foo(a: A, b: B): C => (a, b) => curriedFoo(a, b)

关于scala - 为什么在这个 Scala 方法定义中有两组参数/括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548308/

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