每天学一点Scala之 Currying函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天学一点Scala之 Currying函数相关的知识,希望对你有一定的参考价值。

1、Curring函数 定义?

    将原来接收两个参数的一个函数,转换为两个函数,第一个函数接收原先的第一个参数,然后返回接收原先第二个参数的第二个函数。

在函数调用的过程中,就变为了两个函数连续调用的形式

在marathon源码以及Spark的源码中,也有体现,所以对()()这种形式的Curring函数,要理解。

2、例子:

object CurryingTest {
   def main(args: Array[String]): Unit = {
      println("---->:\t" + sum(3,4))
      println("---->:\t" + sum2(5))
      println("---->:\t" + sum2(5)(1))
      // 柯里函数
      println("---->:\t" + sum3(4)(8))
   }
   def sum(a: Int, b: Int) = a + b
   def sum2(a: Int) = (b: Int) => a + b  // 由sum函数转换成sum3函数时的中间过程
   def sum3(a: Int)(b: Int) = a + b
}



其实,柯里函数到底用在什么场景下,并没有真正理解。

目前,仅仅是,只要看到

sum3(a: Int)(b: Int) = a + b

这种形式,可以直接理解成 或者等价于 

sum(a: Int, b: Int) = a + b

形式




本文出自 “XEJ分布式工作室” 博客,请务必保留此出处http://xingej.blog.51cto.com/7912529/1963456

以上是关于每天学一点Scala之 Currying函数的主要内容,如果未能解决你的问题,请参考以下文章

每天学一点Scala之 匿名函数

每天学一点Scala之 高阶函数 flatten

每天学一点Scala之 高阶函数 map

每天学一点Scala之 方法与函数的区别

每天学一点Scala之 方法与函数的区别

每天学一点Scala之 闭包