第三章 scala语言–Functions
文章目录
前言
今天是学习Scala第四天打卡,开始学习scala函数。
开始代码之旅
1.basic
代码如下(示例):
//返回值,参数,函数体
def fun01() {
println("hello world")
}
fun01()
var x = 3
var y = fun01()
println(y)
//想有返回
// public void sdfsd(){}
// public String sdfsdf(){}
//有return必须给出返回类型
def fun02() = {
new util.LinkedList[String]()
val aa = "sds":String
aa
val flag = false:Boolean
flag
}
//参数:必须给出类型,是val
//class 构造,是var
def fun03(a: Int): Unit = {
println(a)
}
fun03(33)
执行结果:
---------------------------------------------------------------------------------------------------------------------------
hello world
hello world
()
false
33
1.类比JAVA,public String sdfsdf(){},scala想要有返回值,必须给出返回类型;
2.函数参数:必须给出类型,是val;class 构造,是var;
2.递归函数
代码如下(示例):
//递归先写触底! 触发什么报错呀
def fun04(num: Int): Int = {
if (num == 1) {
num
} else {
num * fun04(num - 1)
}
}
val i: Int = fun04(4)
println(i)
执行结果:
---------------------------------------------------------------------------------------------------------------------------
24
3.默认值函数
示例:
def fun05(a: Int = 8, b: String = "abc"): Unit = {
println(s"$a\t$b")
}
fun05(22)
fun05(b = "ooxx")
执行结果:
---------------------------------------------------------------------------------------------------------------------------
22 abc
8 ooxx
4.匿名函数
示例:
//函数是第一类值
//函数:
//1,签名 :(Int,Int)=>Int : (参数类型列表)=> 返回值类型
//2,匿名函数: (a:Int,b:Int) => { a+b } :(参数实现列表)=> 函数体
var xx: Int = 3
var yy: (Int, Int) => Int = (a: Int, b: Int) => {
a + b
}
val w: Int = yy(3, 4)
println(w)
执行结果:
---------------------------------------------------------------------------------------------------------------------------
7
5.嵌套函数
示例:
def fun06(a: String): Unit = {
def fun05(): Unit = {
println(a)
}
fun05()
}
fun06("hello")
执行结果:
---------------------------------------------------------------------------------------------------------------------------
hello
6.偏应用函数
示例:
def fun07(date: Date, tp: String, msg: String): Unit = {
println(s"$date\t$tp\t$msg")
}
fun07(new Date(), "info", "ok")
var info = fun07(_: Date, "info", _: String)
var error = fun07(_: Date, "error", _: String)
info(new Date, "ok")
error(new Date, "error...")
执行结果:
---------------------------------------------------------------------------------------------------------------------------
Sun May 29 22:20:47 CST 2022 info ok
Sun May 29 22:20:47 CST 2022 info ok
Sun May 29 22:20:47 CST 2022 error error...
7.偏应用函数
示例:
def fun08(a: Int*): Unit = {
// for (e <- a) {
// println(e)
// }
// def foreach[U](f: A => U): Unit
// a.foreach( (x:Int)=>{println(x)} )
// a.foreach( println(_) )
a.foreach(println)
}
fun08(2)
fun08(1, 2, 3, 4)
执行结果:
---------------------------------------------------------------------------------------------------------------------------
2
1
2
3
4
8.高阶函数
示例:
/函数作为参数,函数作为返回值
//函数作为参数
def computer(a: Int, b: Int, f: (Int, Int) => Int): Unit = {
val res: Int = f(a, b)
println(res)
}
computer(3, 8, (x: Int, y: Int) => {
x + y
})
computer(3, 8, (x: Int, y: Int) => {
x * y
})
computer(3, 8, _ * _)
//函数作为返回值:
def factory(i: String): (Int, Int) => Int = {
def plus(x: Int, y: Int): Int = {
x + y
}
if (i.equals("+")) {
plus
} else {
(x: Int, y: Int) => {
x * y
}
}
}
computer(3, 8, factory("+"))
执行结果:
---------------------------------------------------------------------------------------------------------------------------
11
24
24
11
9.柯里化
示例:
def fun09(a: Int)(b: Int)(c: String): Unit = {
println(s"$a\t$b\t$c")
}
fun09(3)(8)("sdfsdf")
def fun10(a: Int*)(b: String*): Unit = {
a.foreach(println)
b.foreach(println)
}
fun10(1, 2, 3)("sdfs", "sss")
执行结果:
---------------------------------------------------------------------------------------------------------------------------
3 8 sdfsdf
1
2
3
sdfs
sss
10.方法不想执行,赋值给一个引用 方法名+空格+下划线
示例:
val funa = ooxx
println(funa)
val func = ooxx _
func()
总结
以上就是今天要讲的内容,本文就scala函数使用方面列举了一些示例。并得到以下总结:
- scala语法中,没有基本类型,所以你写一个数字 3 编辑器/语法,其实是把 3 看待成Int这个对象