何为部分应用函数?
Partially applied function: A function that’s used in an expression and that misses some of its arguments.
For instance, if function f has type Int => Int => Int, then f and f(1) are partially applied functions.
A partially applied function is an expression in which you don’t supply all of the arguments needed by the function. Instead, you supply some, or none, of the needed arguments.
缺失的是函数需要的参数
将函数应用(apply)于方法:
In Scala, when you invoke a function, passing in any needed arguments, you apply that function to the arguments
package spark.examples.scala.partialapplyfunc object PartialApplyFuncTest { def calc(a: Int, b: Int, c: Int) = a + b - c def main(args: Array[String]) { val list = List(1, 2, 3, 4, 5) list.foreach(println _) //缺失所有参数(因为println函数只有一个参数,因此println _所有参数等价于println(_)缺失一个参数) list.foreach(println(_)) //缺失一个参数(println实际上就一个参数) // list.foreach(println _)等价于list.foreach(x => println x) // list.foreach(println(_)),是否等价于list.foreach(println _)?等价 val print = println(_: Int) //声明时,需要为缺失的参数指定类型,上面不需要是因为可以从list中推导出来 list.foreach(print) //如下通过_定义的部分应用函数,必须为_指定类型 //val s0 = calc //编译错,参数个数缺失或者根本不存在无参的calc函数 val s00 = calc(1,2,4) //参数足够,直接调用 val s1 = calc(_: Int, 2, 3) //缺失第一个参数 val s2 = calc(_: Int, _: Int, 3) //缺失第一个,第二个参数 val s3 = calc(_: Int, 2, _: Int) //缺失第一个,第二个参数 val s4 = calc(_: Int, _: Int, _: Int) //缺失第一个,第二个和第三个参数 val s5 = calc _ //所有的参数列表都缺失(缺失第一个,第二个和第三个参数) println(s1(10)) println(s2(20, 30)) println(s3(10, 20)) println(s4(3, 2, 1)) println(s5(1, 3, 5)) //apply语法,s5(1,3,5)等价于s5.apply(1,3,5),apply方法将参数列表发送给s5指向的函数,进行调用 val f = (_: Int) + (_: Int) println(f(1, 2)) } }
问题:
定义val s1 = calc(_:Int, 2,3)时为什么一定要为缺失的参数指定类型,而val s5 = calc _则不需要?因为calc的第一个参数类型是确定的,为什么这里还需要再给定类型?
scala> def calc(a: Int, b: Int, c: Int) = a + b - c calc: (a: Int, b: Int, c: Int)Int scala> calc _ res5: (Int, Int, Int) => Int = <function3> scala> calc(1,2,_) <console>:9: error: missing parameter type for expanded function ((x$1) => calc(1, 2, x$1)) calc(1,2,_) ^ scala> calc(1,2,_:Int) res7: Int => Int = <function1> scala>
相关推荐
《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式编程的概念;函数式编程相关的各种“为什么”和“怎么做”;如何编写多核程序;练习和检测。 从OOP到FP,思路的转化 ...
这本书适合有编程基础,对函数式编程感兴趣的读者,无论你是Java开发者还是对新编程范式好奇的学习者,都可以从中了解到如何在Scala和Clojure中应用函数式编程来提高代码质量和效率。 【结论】 随着大数据时代的...
函数式编程(FP)是一种...《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式编程的概念;函数式编程相关的各种“为什么”和“怎么做”;如何编写多核程序;练习和检测。
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
Scala编程详解:函数入门 Scala是一种强类型、多范式的编程语言,它融合了面向对象和函数式编程的特性。...在实际编程过程中,还可以探索高阶函数、闭包、部分应用函数等更高级的概念,进一步提升编程技巧。
《Scala语言核心编程》是尚硅谷教育机构韩顺平老师主讲的一门课程,主要针对Scala这门多范式编程语言进行深入讲解。Scala是一种静态类型的编程语言,它融合了面向对象和函数式编程的概念,设计目标是提供一种简洁、...
Scala是一种静态类型的函数式编程语言,而Spark是一个分布式计算框架,尤其适合于大数据处理和分析。本教程将深入探讨这两者如何结合,实现高效的大数据分析、数据流处理以及机器学习任务。 首先,让我们来理解...
Scala的函数式编程(FP)不仅包括高阶函数、匿名函数、递归和模式匹配等,还提供了不可变数据结构和纯函数等核心概念。本文将详细介绍如何使用Scala脚本进行函数式编程,并提供丰富的代码示例。 Scala的函数式编程...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念,设计目标是提供一种静态类型系统,能够防止程序在运行时出现错误。Scala-2.12.6.tgz是一个针对该语言的最新版本安装包,用于在各种操作系统...
英文原版 scala函数式编程 function programming in scala
详细讲解Scala中的高阶函数部分,具体实例剖析Scala中高阶函数的意义所在,对控制抽象进行了详细的说明,参考书籍《快学Scala》、《Programming in Scala》
Scala SDK,全称为Scala Software Development Kit,是用于开发Scala应用程序的核心工具集。Scala是一种多范式的编程语言,融合了面向对象和函数式编程的特点,它运行在Java虚拟机(JVM)上,能够充分利用Java生态...