什么是咖喱功能的优点和缺点

时间:2017-10-21 16:21:10

标签: function currying

我只是知道它是简单的部分应用程序,它可以(并且Haskell)可以简化语法吗?

1 个答案:

答案 0 :(得分:1)

主要优点是它使部分功能应用更加方便,从而鼓励功能组合。

一个缺点是,它不能很好地适应您可能需要的其他一些语言功能,例如标记,可选和可变参数。它当然不是不可能让它工作,例如OCaml有标记和可选参数,但它变得古怪。你怎么知道一个函数何时被部分应用,或者完全应用并且没有应用可选参数? OCaml的解决方案是假设部分应用,并要求功能被终止"使用非可选参数,可以在不指定所有可选参数的情况下完全应用。

如果语言不纯并且具有某种形式的类型推断,则会出现另一个缺点。然后可以部分地应用副作用函数,在不注意类型不正确的情况下丢弃该值,从而不会发生副作用。语言对这种错误的倾向程度取决于它的类型推断,但在诸如OCaml之类的语言中,这是一个相当常见的初学者错误。然而,可以通过对类型注释进行一些训练来避免它。