博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala中的构造器和高阶函数
阅读量:7237 次
发布时间:2019-06-29

本文共 4360 字,大约阅读时间需要 14 分钟。

构造器

在定义类时可以定义主构造器。主构造器可以同时声明字段。

1 /** 2  * 主构造器 3  * @author Administrator 4  */ 5 //在scala中,类和方法交织在一起 6 class TestClass51(val name:String = "" ,val age:Int = 0){   7    8   println("name="+ name + " age=" + age) 9   10 }11 12 object TestScala51 {13   def main(args: Array[String]): Unit = {14     val c = new TestClass51(age = 18)15   }16 }

 

1 /** 2  * 辅助构造器 3  * @author Administrator 4  */ 5 //在scala中,类和方法交织在一起 6 class TestClass52(){   7   var name:String = ""  8   var age:Int = 0 9   10   def this(name:String){11     this()  //第一行调用主构造器12     this.name = name13   }14   15   def this(name:String , age:Int){16     this(name)  //第一行必须调用主构造器或者其他辅助构造器17     this.age = age18   }19 //  println("name="+ name + " age=" + age)20   21 }22 23 object TestScala52 {24   def main(args: Array[String]): Unit = {25     val c = new TestClass52("zhangsan",20)26     println(c.name)27     println(c.age)28   }29 }

高阶函数

函数可以赋给变量 首先,在scala中,函数是一等公民。

 

匿名函数 函数的形式是 (形参列表)=>返回值类型

函数作为形参

既然函数可以作为参数,那么在调用的时候我们会传递函数的变量过去。那么,我们可以省略函数的定义,在调用的时候直接把函数的实现(即匿名函数)过去。

函数作为形参 对于只有一个参数的,可以只写函数体。 fun3(a=>a+2) 如果形参只有一个,可以在函数体中使用_代替。 fun3(_+2) 函数作为形参的终极版本。

把匿名函数放在函数体内

1 /**  2  * 高阶函数 要为spark做铺垫的话一定要讲高阶函数  3  * Scala中的语法很灵活,公司要自己统一开发规范. 声明方法可以用def 还可以用val和var  4  * @author Administrator  5  */  6 object TestScala53 {  7   def main(args: Array[String]): Unit = {  8 //================================================================      9     //在scala中把函数称之为一等公民  10     def add(a:Int , b:Int) = { 11       a + b 12     } 13     val c = add(3,2) 14     println(c)//打印5 15 //================================================================     16      17     //需求 将一个函数的实现传递给另外函数 18     //应用场景:将一个函数指定另外一个别名;传递函数的实现给另外的函数 19     def func1 = add _  //指的是将一个函数的实现传递给另外一个函数  而不是忘记了给该函数传递参数 20     println(func1(1,3))//打印4 21      22 //================================================================ 23      24     def func2 = (x:Int) => {x + 2}  //匿名函数 25     println(func2(100))//打印102 26      27 //================================================================ 28  29     //定义一个接收函数的函数 30     def func3(f:(Int) => Int) = { 31       f(100) * 2 32     } 33      34     def func4(a:Int) = { 35       a + 1 36     } 37     println(func3(func4 _))//打印202 (100+1)*2  传递一个已有的函数给func3 38      39     println(func3((x:Int) => x + 10))//打印 220 (100+10)*2=220 将一个匿名函数传递给func3 40      41     //Scala中总有一些你意想不到的写法 42     println(func3((x) => x + 10))//打印 220 简写一 类型简写,去掉Int类型 x的类型,程序自己推断 43     println(func3( x => x + 10 ))//打印 220 简写二 44     println(func3(_ + 10))  //打印 220 简写三 45      46       /* 47                 以上简写的条件 48       1.匿名函数作为参数 49         2.只有一行代码 50         */ 51 //================================================================ 52      53     def func5(f:(Int,Int) => Int) = { 54       f(2,3) 55     } 56     println(func5((x:Int,y:Int) => x + y))//打印5 57     println(func5((x,y) => x + y)) //打印5 简写一 58     println(func5(_ + _)) //打印5 简写二 59        60       /* 61                总结“_” 所能代表的意义 62         1、用于取元组值 63         2、代表一个占位符 64         3、指的是将一个函数的实现传递给另外一个函数  而不是忘记了给该函数传递参数 65         4、代表符合条件的每一个元素 66         */ 67      68 //================================================================ 69      70     /*常见的高阶函数*/ 71     //1.filter map 72     var d = (1 to 10).filter( _ % 2 == 1).map(_ * 3) 73     println(d.mkString(","))//打印 3,9,15,21,27 74     //filter( _ % 2 == 1) 过滤出1,3,5,7,9 75      76     var e = (1 to 10).filterNot( _ % 2 == 1) 77     println(e.mkString(","))//打印 2,4,6,8,10 78      79     var f = (1 to 10).reduceLeft(_ + _)//reduceLeft是左累加  1+2 3+3 6+4 .....(1+2+3+...+10=55)  80     println(f)//打印 55 81      82     (1 to 10).map("*" * _).foreach(println _) 83     //foreach是操作前面产生的每个元素 84     /* 85              打印输出 86           * 87           ** 88           *** 89           **** 90           ***** 91           ****** 92           ******* 93           ******** 94           ********* 95           **********      96      */ 97      98 //================================================================ 99     100     //练习101     def func6(x:Int) = {102       (x:Int) => {103         x + 2104       } * 2105     }106     println(func6(1))//打印输出 
传递进去参数之后就一个函数.107 println(func6(1)(2))//打印输出8 (如果把x:Int改成y:Int 就会输出6)就近原则108 }109 }

 

本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5645384.html,如需转载请自行联系原作者

你可能感兴趣的文章
阿里巴巴数学大赛赛题公布,你敢来挑战吗?(含参考答案)
查看>>
设计模式六大原则(1):单一职责原则
查看>>
ubnutu日常使用软件
查看>>
keras 迁移学习inception_v3,缺陷检测
查看>>
【Java】多线程简单了解
查看>>
彩铅练习:蓝色花朵
查看>>
Shell脚本的一些小技巧
查看>>
还不了解自动驾驶汽车?快来看看这份全景式的说明书
查看>>
一定能成功的Android NDK环境配置教程
查看>>
git指令
查看>>
Java Servlet Filter 详解
查看>>
左手VS PK 右手IDEA
查看>>
CI环境下开发Oauth2.0开放平台
查看>>
js实现千位分隔符
查看>>
KVM克隆的ubuntu12.04的虚拟机的基本配置
查看>>
lecture 3.2 problem set 3
查看>>
4-AI--Activity跳转动画
查看>>
(旧) 1- 大家一起学:Flask构建弹幕微电影网站-(一)-(三)合集:数据模型设计映射成表...
查看>>
vuex组件 vuex-persistedstate
查看>>
靠谱的 关闭Windows10自动更新
查看>>