Scala Currying函数与基本函数的解释

时间:2016-01-06 08:36:43

标签: scala

以下两个函数定义有什么区别?如果以前已经回答过,请耐心等待。我不知道第一种被称为正确搜索的函数是什么。

def f1(a: String, b: T)(c: String, d: String, e: String = "_id"): Unit = ???

def f1(a: String, b: T, c: String, d: String, e: String = "_id"): Unit = ???

我知道它与提到的问题类似here

  • Q1:有什么区别?
  • Q2:定义currying函数有什么好处?

1 个答案:

答案 0 :(得分:3)

<强> A1

  • 不同之处在于后者必须同时提供所有参数。

<强> A2

编辑优势/劣势概念

lambda calculus简洁性:

  

在理论计算机科学中,currying提供了一种学习方法   在非常简单的理论模型中具有多个参数的函数   例如lambda演算,其中函数只取一个   参数。

(这里很好的例子:https://en.wikipedia.org/wiki/Currying#Motivation

Curried函数需要closure支持:

  

Curried函数可以用于支持闭包的任何语言

性能的未解决的功能

  

通常优选未使用的功能以提高效率   原因,因为部分申请和关闭的开销   对于大多数函数调用,可以避免创建。

库里 - 霍华德的通信:

  

currying和uncurrying的存在等同于逻辑   定理enter image description here作为元组(产品   type)对应逻辑和函数类型的连接   对应暗示。

来源:https://en.wikipedia.org/wiki/Currying