(TOC)
<人力资源/>
作为值传递的函数
测试代码如下:
cn.xpleaf.bigdata.p4.function<代码>包/* * * scala中关于函数的操作 */对象_01FunctionOps { def主要(args:数组[String]):单位={ functionOps1 }/* * *作为值传递的函数 *将一个函数作为值传递给另外一个函数变量的时候,约定需要在函数后面加上:空格和下划的线 *相当于数据库中的别名,或者数据库表对应的视图 */def functionOps1:单位={ def sayHi(名称:字符串)=println(“你好,”+名字) def sayHello=sayHi _ sayHello (“xpleaf”) } }代码>
输出结果如下:
<代码>你好,xpleaf 代码>
匿名函数
测试代码如下:
cn.xpleaf.bigdata.p4.function<代码>包/* * * scala中关于函数的操作 */对象_01FunctionOps { def主要(args:数组[String]):单位={ functionOps2 }/* * *匿名函数,说白了就是没有函数名字 *匿名函数就和java中的匿名内部类一样,是只适合使用一次的函数 *一般如果一个函数的参数是一个函数,这种情况下多用匿名函数来作为参数进行传递 */def functionOps2:单位={ val printName=(名称:字符串)=比;println(“你好,”+名字) printName (“xpleaf”) } }代码>
输出结果如下:
<代码>你好,xpleaf 代码>
其实前面在学习ArrayBuffer的时候已经有使用过匿名函数:
<代码> scala>val ab=ArrayBuffer (Int)(3 8 2、20日5、7) 阿瑟:scala.collection.mutable。ArrayBuffer (Int)=ArrayBuffer(3 8 2、20日5、7) scala>ab.sortWith ((v1、v2)=比;v1祝辞v2) res209: scala.collection.mutable。ArrayBuffer (Int)=ArrayBuffer(20、8、7、5、3、2) 代码>
带函数参数的函数(高阶函数)
说明的作用有两个(匿名函数作为参数和返回值为匿名函数),具体参考下面的测试代码:
cn.xpleaf.bigdata.p4.function<代码>包/* * * scala中关于函数的操作 */对象_01FunctionOps { def主要(args:数组[String]):单位={//functionOps1//functionOps2 functionOps3 }/* * * scala的高阶函数,就是函数的(参数是函数)的函数,把这种函数称为高阶函数 */def functionOps3:单位={//1 .匿名函数作为参数 def highOrderFunc(名称:字符串,func:(字符串)=比;单位):单位={ func(名字) } highOrderFunc (“xpleaf”(名称:字符串)=比;println(“你好,”+名字))//2 .将匿名函数作为返回值传递给另外一个函数 def getGoodBayFunction (gMsg:字符串)=(gName:字符串)=比;println (gMsg +”、“+ gName) val goodbayFunction=getGoodBayFunction(“再见”) goodbayFunction (“xpleaf”) } }代码>
输出结果如下:
<代码>你好,xpleaf 再见,xpleaf 代码>
参数(类型)推断
测试代码如下:
cn.xpleaf.bigdata.p4.function<代码>包 进口scala.collection.mutable.ArrayBuffer/* * * scala中关于函数的操作 */对象_01FunctionOps { def主要(args:数组[String]):单位={//functionOps1//functionOps2//functionOps3 functionOps4 }/* * *对于匿名函数的省略写法 */def functionOps4:单位={ val ab=ArrayBuffer (Int) (1、2、3、4、5)//val newAB=ab.map ((x: Int)=比;x * 100)//val newAB=ab.map ((x)=比;x * 100)//val newAB=ab.map (x=比;x * 100) val newAB=ab.map (100 * _) println (newAB)//ArrayBuffer (100、200、300、400、500) } }代码>
输出结果如下:
<代码> ArrayBuffer(100、200、300、400、500) 代码>
常见高阶函数——地图函数
<代码>遍历集合中的每一个元素,返回也是一个集合,集合大小和之前集合相等。代码>
-
<李>快速产生0.1,0.2,0.3等方式的数字李>
<代码> scala>(1到9). map (0.1 * _) .foreach (println (_)) 0.1 0.2 0.30000000000000004 0.4 0.5 0.6000000000000001 0.7000000000000001 0.8 0.9 代码>
-
<李>打印三角形李>
<代码> scala>(1到9). map (“*”* _) .foreach (println (_)) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 代码>
Scala笔记整理(五):函数式编程