我看到了很多关于currying技术是什么的文档和问题,但我找到的关于为什么要在实践中使用它的信息很少。我的问题是,currying的优势是什么?也许您可以提供一个简单的示例,说明currying比传统的方法调用更可取。
我在太阳升起的时候在C++工作,所以到目前为止,除了在工作之外对语言进行修补之外,我几乎没有接触过currying。
发布于 2011-03-15 00:33:53
首先,将部分函数应用程序误认为currying是很常见的。例如,请参阅this (我相信有更好的资源来描述它,但这是我找到的第一个)。我几乎从来没有见过有人在实践中使用currying (除了像Haskell这样的语言,可以说,每个函数都是由语言本身创建的,但即使这样也是为了实现简单的部分函数应用程序)。另一方面,部分函数应用程序在许多语言中都非常有用。
无论如何,假设您正在谈论部分函数应用程序(因为这是大多数人在询问currying时所谈论的),那么这个概念在C++中并不像在(纯)函数式语言中那么自然,例如Haskell。
例如,我们在这里定义了一个函数sum,它接受一个数字数组list,并将所有数字相加。如果您不熟悉折叠(或缩减或注入,有时被称为)的概念,请阅读this。不管怎样,它看起来像这样:
sum list = foldl (+) 0 list但是等一下。我们可以使用部分函数应用程序来缩短它!我们不提供参数,而只是说sum是一个等于foldl的函数,部分应用了+和0。
sum = foldl (+) 0哪一个更容易阅读?可能是偏好的问题,但在我看来,后者更清楚地强调了sum和foldl之间的关系。请考虑到这是一个非常简单的例子。老实说,我不知道如何用C++写一个好的例子,所以你得原谅我。无论如何,它的实际优势是什么?可读性。更清晰的意图。更短的代码。
免责声明:如果你真的想知道currying的优点(相对于部分函数应用程序),我很抱歉让你阅读了所有这篇文章。但另一方面,如果你理解了两者之间的区别,你也会理解currying是实现部分函数应用程序的一种很好的方法。
https://stackoverflow.com/questions/5301181
复制相似问题