当前位置:网站首页>10 advanced functions of scala
10 advanced functions of scala
2022-08-10 15:21:00 【S_ng】
包括:
1) 函数传名调用
2) Specify the function parameter name to call
3) 可变参数的函数
4) 默认参数值函数
5) 递归函数
6) 高阶函数
7) 内嵌函数
8) 匿名函数
9) 偏应用函数
10) 函数柯里化
1) 函数传名调用
o 概念说明
传值调用:先计算参数表达式的值,再应用到函数内部,
把=>去掉即可,That is, in the original way
传名调用:将未计算的参数表达式直接应用到函数内部,
用=>to set up call by name
o 应用示例-传值
object TestCallByValue {
def main(args: Array[String]) {
delayedCalculator(transmitMe());
}
def transmitMe(): String = {
println("我在 transmitMe 方法中!")
return "transmitMe 返回值"; }
def delayedCalculator(t: String): Unit = {
println("在 delayedCalculator 方法--开始")
println("Formally call the passed function: " + t)
println("在 delayedCalculator 方法--结束") } }
o 应用示例-传名
object TestCallByName {
def main(args: Array[String]) {
delayedCalculator(transmitMe());
}
def transmitMe(): String = {
println("我在 transmitMe 方法中!")
return "transmitMe 返回值";
}
def delayedCalculator(t: => String): Unit = {
println("在 delayedCalculator 方法--开始")
println("Formally call the passed function: " + t)
println("在 delayedCalculator 方法--结束")
}
}
2)Specify the function parameter name to call
object TestCallByParaName {
def main(args: Array[String]) {
printBabyNames(second = "张二", first = "张一");
}
def printBabyNames(first: String, second: String): Unit
= {
println("The first child called=" + first);
println("The second child called=" + second);
} }
3)可变(不定长)参数的函数
object TestNonFixParas {
def main(args: Array[String]) {
printAllParasValue("one", "two", "three", "four");
}
def printAllParasValue(paras: String*): Unit = {
for (temp <- paras) {
println(temp);
} }
}
4)默认参数值函数
object TestDefaultParaFunction {
def main(args: Array[String]) {
println("Use the default return value entirely : " + salaryMoney());
println("Some return values using default values : " + salaryMoney(10));
println("Some return values using default values : " + salaryMoney(10,10000));
}
def salaryMoney(a: Int = 5, unit: Int = 1000): Int = {
return a * unit
} }
5)递归函数
object TestRecusive {
def main(args: Array[String]) {
var n=4
println(n+"的阶乘为="+myFactorial(n))
}
def myFactorial(n: Int): Int = {
if (n <= 1)
return 1
else
return n * myFactorial(n - 1) } }
6)高阶函数
概念说明
第一种:Take one function as an argument to another function,即参数为
函数的函数
第二种:返回值是函数的函数,That is, higher-order functions can produce functions
o 应用示例
参数为函数的函数
object TestHighFunctionByTransmitFunctionPara {
def main(args: Array[String]) {
delayedCalculator(transmitMe());
}
def transmitMe(): String = {
println("我在 transmitMe 方法中!")
return "transmitMe 返回值"; }
def delayedCalculator(t: => String): Unit = {
println("在 delayedCalculator 方法--开始")
println("Formally call the passed function: " + t)
println("在 delayedCalculator 方法--结束") } }
返回值是函数的函数
object TestHighFunctionByRetFunction {
def main(args: Array[String]) {
var mySalaryFun=multiplyBy(1000);
println(mySalaryFun(10));
}
def multiplyBy(salaryUnit:Int)=(x:Int)=>salaryUnit*x }
7)内嵌函数
o 概念介绍
函数内定义函数,定义在函数内的函数称之为局部函数,
Also called an inline function
o 应用示例
object TestEmbedFunction {
def main(args: Array[String]) {
var msg="HelloWorld";
printMessage(msg);
}
def printMessage(msg: String): Unit = {
def printMessageInner(msg: String): Unit = {
println(msg);
}
printMessageInner(msg);
} }
8)匿名函数
o 概念介绍
A function without a function name
使代码更简洁,用=>来表示,On the left is the parameter list,letter on the right
数体
o 应用示例
Anonymous usage(Increment the value+1 的函数实现)
函数定义:
var inc = (x:Int) => x+1
函数使用:
var x = inc(8)+1
9)偏应用函数
o 概念说明
不需要提供函数需要的所有参数,只需要提供部分,或不
提供所需参数
实现方法:A part of the parameters of the bound function,For the unbound part"_"代
替,Thereby forming a partial application function to use
o 应用示例
传统方法实现(Say hello to someone)
import java.util.Date
object TestPartialParasFunction {
def main(args: Array[String]) {
val name="张三"
sayHello(name, "上午好")
Thread.sleep(1000)
sayHello(name, "中午好")
Thread.sleep(1000)
sayHello(name, "晚上好") }
def sayHello(name: String, message: String)
= {
println(name + "----" + message) } }
Partially applied function implementation(Say hello to someone)
def main(args: Array[String]) {
val name="张三"
val partialSay=sayHello(name,_:String);
partialSay("上午好")
Thread.sleep(1000)
partialSay("中午好")
Thread.sleep(1000)
partialSay("晚上好") }
def sayHello(name: String, message: String) = {
println(name + "----" + message) }
10) 函数柯里化
o 概念说明
Turn the original function that takes two arguments into a new function that takes one argument
的过程.The new function returns a function that takes the original second argument as an argument
数.
Improved flexibility of usage
o 应用举例
传统实现 add 方法定义
def add(x: Int, y: Int) = x + y;
传统实现 add 方法使用
def main(args: Array[String]) {
println(add(3,4));
}
def add(x: Int, y: Int) = x + y;
柯里化实现 add 方法定义
def add(x:Int)(y:Int) = x + y
柯里化实现 add 方法使用
object TestCurryingFunction {
def main(args: Array[String]) {
//Corresponds to the curried form 1 的使用
var curryingAdd1 = add1(3)
//Corresponds to the curried form 2 的使用
var curryingAdd2 = add2(3)(_)
println(curryingAdd1(4));
println(curryingAdd1(4));
}
//Curried form 1
def add1(x: Int) = (y: Int) => x + y;
//Curried form 2
def add2(x: Int)(y: Int) = x + y; }
边栏推荐
- XML基本学习
- 2022-08-10日报: Swin Transformer作者曹越加入智源,开展视觉基础模型研究
- 关于async\await 的理解和思考
- QOS function introduction
- Azure IoT 合作伙伴技术赋能工作坊:IoT Dev Hack
- 网络工程师的背包(EDC总结推荐)
- “国资云”和“国家云”能给市场带来怎样的变革?
- Analysys and the Alliance of Small and Medium Banks jointly released the Hainan Digital Economy Index, so stay tuned!
- Understanding_Data_Types_in_Go
- 王学岗————直播推流(软便)03x264集成与camera推流
猜你喜欢
随机推荐
PAT甲级 1014 排队等候(队列大模拟+格式化时间)
基于ArcGIS水文分析、HEC-RAS模拟技术在洪水危险性及风险评估
Rich Dad Poor Dad Reading Notes
win2012安装Oraclerac失败
易基因|深度综述:m6A RNA甲基化在大脑发育和疾病中的表观转录调控作用
XML基本学习
Summary of tensorflow installation stepping on the pit
scala集合
王学岗—————————哔哩哔哩直播-手写哔哩哔哩硬编码录屏推流(硬编)(26节课)
【MindSpore易点通机器人-02】设计与技术选型
fatal error C1083 Unable to open include file 'io.h' No such file
丁香园
1004 (tree array + offline operation + discretization)
富爸爸穷爸爸之读书笔记
systemui屏蔽通知栏
CSP-J1 CSP-S1 初赛 第1轮(2022.08.09)
解题-->在线OJ(十九)
TestLink导出用例转换工具
物资采购小程序开发制作功能介绍
12海里、24海里、200海里的意义及名称