- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
03.Scala高级特性
Scala高级特性课程目标目标一:深入理解高阶函数目标一:深入理解隐式转换高阶函数概念Scala混合了面向对象和函数式的特性,我们通常将可以做为参数传递到方法中的表达式叫做函数。在函数式编程语言中,函数是“头等公民”,高阶函数包含:作为值的函数、匿名函数、闭包、柯里化等等。作为值的函数可以像任何其他数据类型一样被传递和操作的函数,每当你想要给算法传入具体动作时这个特性就会变得非常有用。定义函数时格式:val 变量名 = (输入参数类型和个数) = 函数实现和返回值类型和个数“=”表示将函数赋给一个变量“=”左面表示输入参数名称、类型和个数,右边表示函数的实现和返回值类型和参数个数匿名函数在Scala中,你不需要给每一个函数命名,没有将函数赋给变量的函数叫做匿名函数由于Scala可以自动推断出参数的类型,所有可以写的跟精简一些还记得神奇的下划线吗?这才是终极方式将方法转换成函数在Scala中,方法和函数是不一样的,最本质的区别是函数可以做为参数传递到方法中但是方法可以被转换成函数,神奇的下划线又出场了柯里化柯里化指的是将原来接受两个参数的方法变成新的接受一个参数的方法的过程例子package cn.itcast.scalaobject FunDemo { def main(args: Array[String]) { def f2(x: Int) = x * 2 val f3 = (x: Int) = x * 3 val f4: (Int) = Int = { x = x * 4 } val f4a: (Int) = Int = _ * 4 val f5 = (_: Int) * 5 val list = List(1, 2, 3, 4, 5) var new_list: List[Int] = null //第一种:最直观的方式 (Int) = Int //new_list = list.map((x: Int) = x * 3) //第二种:由于map方法知道你会传入一个类型为(Int) = Int的函数,你可以简写 //new_list = list.map((x) = x * 3) //第三种:对于只有一个参数的函数,你可以省去参数外围的() //new_list = list.map(x = x * 3) //第四种:(终极方式)如果参数在=右侧只出现一次,可以使用_ new_list = list.map(_ * 3) new_list.foreach(println(_)) var a = Array(1,2,3) a.map(_* 3) }}隐式转换和隐式参数概念隐式转换和隐式参数是Scala中两个非常强大的功能,利用隐式转换和隐式参数,你可以提供优雅的类库,对类库的使用者隐匿掉那些枯燥乏味的细节。作用隐式的对类的方法进行增强,丰富现有类库的功能隐式转换函数是指那种以implicit关键字声明的带有单个参数的函数隐式转换例子package cn.itcast.impliimport java.io.Fileimport scala.io.Source//隐式的增强File类的方法class RichFile(val from: File) { def read = Source.fromFile(from.getPath).mkString}object RichFile { //隐式转换方法 implicit def file2RichFile(from: File) = new RichFile(from)}object MainApp{ def main(args: Array[String]): Unit = { //导入隐式转换 import RichFile._ //import RichFile.file2RichFile println(new File(c://words.txt).read) }}package cn.itcast.scalaimport java.awt.GridLayout/** * Created by ZX on 2015/11/13. */object ImplicitContext{ //implicit def girl2Ordered(g : Girl) = new Ordered[Girl]{ // override def compare(that: Girl): Int = if (g.faceValue that.faceValue) 1 else -1 //} implicit object OrderingGirl extends Ordering[Girl]{ override def compare(x: Girl, y: Girl): In
您可能关注的文档
最近下载
- 京剧的服装课件.ppt VIP
- 保证供货周期的组织方案和人力资源安排.doc VIP
- 乌有先生历险记(原文,练习,注释,翻译)解读.doc
- 红色经典故事PPT课件.pptx VIP
- (人教版2024)生物七上2.2.1 无脊椎动物(新教材).pptx
- 2023-2024学年江西省上饶市余干县八年级上期中物理试卷附答案解析.pdf
- 西北师范大学教育学理论与实践期末试卷.doc VIP
- 2023年成都信息工程大学数据科学与大数据技术专业《数据结构与算法》科目期末试卷B(有答案).docx VIP
- 河北省衡水中学2024-2025学年高三上学期第一次综合素养测评数学试题(原卷版).docx
- 数据结构(用面向对象方法与C++语言描述)第二版.pdf VIP
文档评论(0)