我的一个同事给我发了一个问题如下:实施,在斯卡拉
实现上的HOF(高阶函数)执行讨好,你的函数的 签名是如下:
def curry[A,B,C](f:(A,B) => C) : A => B => C
类似地,实现执行uncurrying一个函数,如下所示:
def uncurry[A,B,C](f:A => B => C): (A,B) => C
我理解currying的方式是,如果您有一个函数需要多个参数,您可以重复将函数应用于每个参数,直到得到结果。
所以沿着f:(A,B) => C
线的东西变成A => f(A,_) => f(B)
????
而且uncurrying将这个应用程序整合到一个功能如下:
f:A=>B=>C
会f(A,B)
?
也许我只是被语法这里混淆,但将是巨大的,如果有人能指出我是缺少在这里。
谢谢
感谢您的解释。这是一个非常实用的例子。我只是想弄清楚编译器如何评估表达式,比如a => b => f(a,b) –
我发布了一个更新。请让我知道这是否有帮助。 –
谢谢。现在更清楚了。我将此标记为答案。 –