码迷,mamicode.com
首页 > 其他好文 > 详细

Thinking in scala (6)----高阶函数----返回一个函数

时间:2014-10-31 11:40:31      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   java   sp   div   log   

Thinking in scala (5)----高阶函数* 里面,我们演示了如何把一个函数作为参数传递给另外一个函数。

在本文里面,我们来演示函数式编程另外一个重要的特性:返回一个函数。首先来看这么一段代码:

code piece 1:

def sum(f:Int=>Int):(Int,Int)=>Int={
       def sumF(a:Int,b:Int):Int=
         if(a>b) 0
         else f(a)+sumF(a+1,b)
       sumF
   }

一点点来看,f:Int=>Int 是sum函数接收的参数,该参数是一个函数。 

":" 号后面的 (Int,Int) => Int 是sum函数的返回值,而因为(Int,Int) => Int代表的实际上是一个“匿名函数”,

也就是说调用sum函数,其返回的值是一个函数。  这一点对于已经习惯C、C++、Java等编程语言的

程序员来说有一点难以理解。

继续看例子吧,如果执行下面的一行代码会发生什么呢?

sum(x=>x*x)(1,4)

结果会返回30。为什么是30呢? 30= 1^2+ 2^2 + 3^2 + 4^2.

首先,sum(x=>x*x) 是一个函数,并且sum(x=>x*x)的类型是(Int,Int)=>Int,正因为sum(x=>x*x)是一个函数,

所以它才可以继续接收参数(1,4).

好吧,我可能没有把这个事儿说清楚,实在是太抽象了。

Thinking in scala (6)----高阶函数----返回一个函数

标签:style   blog   http   color   os   java   sp   div   log   

原文地址:http://www.cnblogs.com/wzm-xu/p/4064389.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!