Scala中的函数是Java中完全没有的概念。因为Java是完全面向对象的编程语言,没有任何面向过程编程语言的特性,因此Java中的一等公民是类和对象,而且只有方法的概念。
而Scala是一门既面向对象,又面向过程的语言。因此在Scala中有非常好的面向对象的特性,可以使用Scala来基于面向对象的思想开发大型复杂的系统和工程;而且Scala也面向过程,因此Scala中有函数的概念。在Scala中,函数与类、对象等一样,都是一等公民。Scala中的函数可以独立存在,不需要依赖任何类和对象。
1、本地函数,其实本地函数就是定义在函数内部的函数
def processData(fileName:String,width:Int){ //定义本地函数-("内部/私有函数...") def processLine(line:String){ if(line.length>width) println(fileName+":"+line) } val source=Source.fromFile(fileName) for(line<- source.getLines()) processLine(line)//调用本地函数 }
2、偏函数 PartialFunction 偏函数是个数学概念, 偏函数不是"函数"的一种, 而是一个跟函数平行的概念,它是指定义域X中可能存在某些值在值域Y中没有对应的值,
/** PartialFunction特质规定了两个要实现的方法:apply和isDefinedAt * PartialFunction[]中第一个泛型表示传递进行参数的类型,第一个泛型表示返回值的类型 * 因为case语句只能声明一个变量,那么偏函数受限于此,也只能有一个参数 */ val par = new PartialFunction[Any,Int] { //isDefinedAt用来告知调用方这个偏函数接受参数的范围 override def isDefinedAt(x: Any): Boolean = if(x.isInstanceOf[Int]) true else false //apply方法用来描述对已接受的值如何处理 override def apply(v1: Any): Int = v1.asInstanceOf[Int] + 1 } List(1,3,8,"two") collect par foreach(println)
但是这样使用起来真得非常笨拙,其实还有一种方式来定义偏函数,那就是模式匹配
val spar:PartialFunction[Any,Int] = {case i:Int => i + 1} List(1,3,8,"two") collect spar foreach(println) 输出: 2 4 9
但是我需要分别匹配2个怎么办?orElse
val num:PartialFunction[Any,Int] = {case x:Int => x * 3} val str:PartialFunction[Any,String] = {case x => x + " is String"} println("PartialFunction orElse") List(1,2,3,"one") collect (num orElse str) foreach println 输出: 3 6 9 one is String
case 有时候是可以被编译成匿名函数,但是如果List里面包含的元素和case里面不匹配的话就会出错
/** * 一个case语句就是一个独立的匿名函数 * case i:Int => i +3 等价 (i:Int) =>i +3 */ List(1,2,3) map {case i:Int => i +3} foreach(println) //collect 接受的是PartialFunction偏函数 List(1,2,3) collect {case i:Int => i +3} foreach(println) //map接受的是一个函数 所以到了one元素的时候会报类型错误 //List(1,2,3,"one") map {case i:Int => i +3} foreach(println) val num:PartialFunction[Any,Int] = {case x:Int => x * 3} val str:PartialFunction[Any,String] = {case x => x + " is String"} println("PartialFunction orElse") //只要保证list元素能在偏函数中匹配完就不会报错 List(1,2,3,"one") map (num orElse str) foreach println
3、部分应用函数 Partial Applied Function 是指一个函数有N个参数, 而我们为其提供少于N个参数, 那就得到了一个部分应用函数
def sum(a:Int,b:Int) = a + b ; /** * p_sum: Int => Int = <function1> * Function类型有多个版本,Function0表示无参数函数,Function1表示只有一个参数的函数 * PartialFunction还是Function1d的子类 */ def p_sum = sum(1, _:Int) println(p_sum(4)) 输出: 5
相关推荐
### Scala学习笔记(全) #### 一、Scala概述与特点 Scala是一种多范式的编程语言,旨在集成面向对象编程和函数式编程的各种特性。它运行于Java平台(Java虚拟机JVM),并且能够完全兼容所有的Java程序。这使得Scala...
在"scala学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...
### Scala学习笔记关键知识点 ...以上内容涵盖了Scala学习笔记中的关键知识点,从并发编程到函数式编程的核心概念,再到Scala语言本身的一些特殊规则和特点,这些都是学习Scala时需要掌握的基础知识。
读书笔记:《scala函数式编程》书本学习代码
- 函数和高阶函数:学习如何定义和使用函数,以及如何使用高阶函数进行函数式编程。 - 集合:深入研究Scala的集合API,掌握其使用技巧和优化策略。 - 特性与模式匹配:学习如何使用特性来解决多重继承问题,以及如何...
读书笔记:基于scala语法学习函数式编程方法
读书笔记:函数式编程 scala,java8,groovy 学习
读书笔记:scala的纯函数式编程数据结构学习
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,被广泛应用于大数据处理、分布式计算和高性能应用开发。...每个文档都配有实例和注释,便于理解和实践,是Scala学习者宝贵的资源。
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,使得它在处理并发、大数据分析以及构建高性能系统时表现卓越。在"Scala-学习资料-mht.rar"这个压缩包中,包含了关于Scala的学习资料,格式为...
以上内容覆盖了 Scala 编程语言的核心知识点,从基本语法到高级特性,为初学者提供了一个全面的学习指南。Scala 是一门功能强大且灵活的语言,适合于构建大型的、复杂的软件系统。希望这些知识点能够帮助读者更好地...
读书笔记:《Scala与Clojure函数式编程模式Java虚拟机高效编程》学习代码记录
本教程“scala-learn:scala学习笔记”旨在帮助初学者深入理解Scala的基础知识,同时也为有经验的程序员提供了一个复习和提升的平台。 1. **基础语法与数据类型** Scala的基础语法简洁而强大,包括变量声明(val和...
### Scala的操作笔记 #### 一、课程目标与学习路径 ...通过本课程的学习,不仅可以掌握Scala的基础知识,还能深入了解Scala在实际项目中的应用技巧,为进一步探索Spark等大数据处理框架打下坚实的基础。
1. 学习曲线陡峭:Scala 语言的学习曲线陡峭,需要一定的编程基础和函数式编程的知识。 2. 与 Java 语言的集成:Scala 语言与 Java 语言的集成需要一定的经验和实践。 3. 工具支持不够完善:Scala 语言的工具支持...
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在Java虚拟机上,并兼容现有的Java程序。 Scala 源代码被编译成Java字节码,所以它可以运行于...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,被广泛应用于大数据处理、分布式计算和Web开发等领域。Spark是基于Scala构建的大数据处理框架,其高性能和易用性使得Scala在大数据领域备受...
Scala学习资源Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式编程和函数式编程风格。Christopher Diggins认为: 不太久...
Scala 初学者入门课程笔记 Scala 是一种多范式编程语言,支持面向对象编程、函数式编程和逻辑编程。...Scala 是一种功能强大且灵活的编程语言,掌握 Scala 基础语法和函数式编程是学习 Scala 的基础。