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

高阶函数

时间:2015-08-01 21:45:21      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

技术分享var m = math.max _ 把方法变为函数
技术分享场景:调用、传递
 
 
高阶函数---匿名函数
技术分享格式   (...)=>(... )
技术分享匿名函数做参数
技术分享
技术分享
技术分享Array(1,2,3,4).map((x:Int)=>x+3)

等同于Array(1,2,3,4).map{(x:Int)=>x+3}

等同于Array(1,2,3,4) map {(x:Int)=>x+3
 
技术分享函数的参数含有匿名函数

   def f1(f : (Int)=>Int) = f(-5)

 

技术分享函数体含有匿名函数【即闭包】

   def f1(f : Int) = (x:Int)=>(x+3) * f

 

技术分享SAM(single abstract method)

   xx.addActionListener(new ActionListener(){

      ....

    });

技术分享科里化函数

    def f(x:Int)(y:Int) = x*y

 

常见的高阶函数

技术分享map

如(1 to 5).map(1 + _)

技术分享foreach

如(1 to 5).foreach(println)

技术分享filter

如(1 to 5).filter(_%2==0)

技术分享reduce

如(1 to 5).reduce(_*_)

 

集合

技术分享http://www.scala-lang.org/docu/files/collections-api/collections.html

 

技术分享http://blog.csdn.net/lyrebing/article/details/20362227
 
 
 1 object  Test7  extends App{
 2 
 3   //高阶函数
 4     def f(i:Int)=i+3;  
 5     //将f赋给V
 6     var v=f _
 7     println(v(33))//调用v就相当于调用f
 8   
 9     
10     //将1到4作用于V 并返回给map,   把变量当作参数传递
11     println((1 to 4).map(v))//Vector(4, 5, 6, 7)
12     
13 
14     
15     //匿名高阶函数
16     //def f(i:Int)=i+3;
17     //这就是匿名函数
18     var p=(i:Int) => i+3;
19     
20     println((1 to 4).map(p))
21        
22     //Array(1,2,3,4).map((x:Int)=>x+3)
23     //等同于Array(1,2,3,4).map{(x:Int)=>x+3}
24     //等同于Array(1,2,3,4) map {(x:Int)=>x+3}
25     
26      //函数的参数含有匿名函数  () = > v
27     //代表 i 现在就是一个函数 i的类型为匿名函数,
28     def g(i:(Int) => Int )=i(3);
29     var h=g _
30     var s=(i:Int) =>i+3;
31     //运行过程 在传人您名函数之前i(3) i已经变为3 此时 3+3=6
32     println(h(s))
33     
34     
35     //函数体含有匿名函数
36     
37     //f1这个函数有两个未知参数
38     //=> 右边的值带等号和不带等号的区别  带等号表示( x+3)是函数的执行体,不带表示右边都是函数的执行体
39     
40     def f1(f:Int)=(x:Int) =>( x+3) *f
41     
42     //科里化函数写法
43     def f2(f:Int)(x:Int)=(x+3)*f
44     
45     
46     
47     // f1(2) 此时返回的是一个函数  <function1> 相当于 (i:Int) => (i+3)*2
48     
49     var ff=f1(2);
50     
51     //这样就会把值传给匿名函数
52     println(ff(3));//12
53     
54     //也可以这样传参 f1(2)(3)
55     
56     
57     //常见高阶函数
58     // _代表每一个元素
59     (1 to 5 ).map(1+ _);// 2,3,4,5,6
60     (1 to 5).reduce(_*_)// 1*2*3*4*5
61     (1 to 5).reduce(_*_)//1+....+5
62     
63     
64     
65     
66       
67 }

 

 
 
 
 
 
 

 

 

高阶函数

标签:

原文地址:http://www.cnblogs.com/thinkpad/p/4694599.html

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