大数据全系列 教程
1869个小节阅读:467.2k
目录
408考研
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
函数作为参数的好处?
xxxxxxxxxx
object FunctionToTypeArgXx {
def main(args: Array[String]): Unit = {
def funcA(x:Int,y:Int,函数): Unit ={
val result = 函数(x,y)
println(result)
}
funcA(1,2,求和函数)
funcA(1,2,求差函数)
}
}
代码拆解分析演示:
xxxxxxxxxx
package com.itbaizhan.chapter03
//函数作为参数
object FunctionToTypeArg1 {
def main(args: Array[String]): Unit = {
//TODO 1 无参无返回值
/**public void method(Student stu){}
* public void method(参数类型 参数名称){}
* Scala同理,让函数作为参数
* fun:()=>Unit 表示参数是一个函数对象,这个函数是一个无参无返回值的函数
* ()表示是一个无参的函数
* Unit表示是一个无返回值的函数
*/
def funcA(fun:()=>Unit): Unit ={
//调用传递过来的函数
fun()
}
def funcObjA(): Unit ={
println("funcObjA被调用")
}
//funcA(funcObjA _)
//下划线可以省略 应该在函数funcA声明的时候定义了参数的函数类型 无参无返回值的类型
//funcA(funcObjA)
// TODO 2 有参数以后返回值
/**fun:(Int,Int)=>Int) 表示funcB的参数为一个函数
* (Int,Int) 这个函数是一个有两个参数的函数,这两个参数都是Int类型
* Int 表示这个函数的返回值是一个Int类型
* @param fun
*/
def funcB(fun:(Int,Int)=>Int): Unit ={
//该设计缺陷是 fun(2,1) 写死的参数值
val result = fun(2,1)
println(result)
}
//定义一个函数
def funcObjB1(x:Int,y:Int): Int ={
x+y
}
//funcB(funcObjA) //错误的,因为funcObjA参数和返回值类型 与funcB要求的参数类型不匹配
funcB(funcObjB1)//3
def funcObjB2(x:Int,y:Int): Int ={
x-y
}
funcB(funcObjB2)//1
def funcObjB3(x:Int,y:Int): Int ={
x/y
}
funcB(funcObjB3)//2
//TODO 3.省略 作为参数的函数
//省略关键字、函数名、返回值类型;在将 ": =" 改为 "=>"
funcB((x:Int,y:Int)=>{
x/y
})
//继续简化: 函数体只有一行,函数体外的{}可以省略
funcB((x:Int,y:Int)=> x/y)
//参数的类型如果能够推断出来,参数的类型可以省略
funcB((x,y)=> x/y)
//如果参数只有一个的话,参数列表的小括号可以省略
//funcB(x,y=> x/y)错误的 参数>=2话,参数列表的小括号不可以省略
//如果参数在使用时,按照声明的顺序只使用一次时,那么可以使用下划线代替
println("------------funcObjBn不需要定义-----------------")
funcB((_/_))//2 继续省略
funcB(_/_)//2
funcB(_-_)//1
funcB(_*_)//2
funcB(_+_)//3
}
}