Scala 中 f(a,b) 和 f(a)(b) 之间的区别

Har*_*Rao 3 scala

我对 Scala 非常陌生。我正在阅读 Paul Chiusano 和 Rúnar Bjarnason 写的一本名为《Scala 函数式编程》的书。到目前为止,我觉得这很有趣。我看到了咖喱和非咖喱的解决方案

def curry[A,B,C](f: (A, B) => C): A => (B => C)= {
    a => b => f(a,b)
  }

def uncurry[A,B,C](f: A => B => C): (A, B) => C = {
    (a,b) => f(a)(b)
  }
Run Code Online (Sandbox Code Playgroud)

在 Curry 中,我理解 f(a,b) 导致类型 C 的值,但在 uncurry 中我不理解 f(a)(b)。谁能告诉我如何阅读 f(a)(b) 或者这如何导致 C 类型,或者请向我推荐一些可以向我解释这一点的在线材料?

谢谢你的帮助。

O. *_*Gre 5

基本上返回类型f(a)是一个类型的函数B => C让我们调用这个结果g。如果您随后调用,g(b)您将获得一个 type 值Cf(a)(b)可以扩展到f.apply(a).apply(b)