代码之家  ›  专栏  ›  技术社区  ›  eliasah

Scala Currying函数与基本函数的比较

  •  1
  • eliasah  · 技术社区  · 10 年前

    以下两个函数定义之间的区别是什么?如果以前有人回答过,请原谅我。我不知道要正确搜索的第一类函数是什么。

    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 .

    • 问题1:有什么区别?
    • Q2:定义curring函数有什么好处?
    1 回复  |  直到 9 年前
        1
  •  3
  •   Filippo Vitale    10 年前

    A1型 :

    • 不同的是,在后者中,您必须同时提供所有参数。

    A2型 :


    EDIT概念上的优点/缺点

    lambda calculus 示例性:

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

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

    Curried函数需求 closure 支持:

    Curried函数可以在任何支持闭包的语言中使用

    的未排序函数 表演 :

    为了提高效率,通常优先选择无序函数 原因,因为部分应用程序和关闭的开销 对于大多数函数调用,可以避免创建。

    CurryHoward通信:

    curring和uncurring的存在等同于逻辑 定理 enter image description here 作为元组(乘积 类型)对应于逻辑中的连词和函数类型 对应于暗示。

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

    推荐文章