这被命名为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. 另一种情况是 type 的函数Request => DataBase => Int,您只需提供Request,最后当您确实需要运行请求时,提供DataBase请求必须发送到的 。
类型(A, B) => C和A => B => C是同构的。Scala 提供了tupledand uncurriedthat 就是这样做的。
def curriedFoo(a: A)(b: B): C = a => b => foo(a, b)
def foo(a: A, b: B): C => (a, b) => curriedFoo(a, b)