Scala functions
Code example
import java.time.LocalDateTime
/**
* 1. object 中才能使用main函数
* 2. 函数中可以有函数
* 3. 函数不写等号 代表没有返回值 unit,
* 有等号但没指定类型那么最后一行是什么类型就返回什么类型
* 通过 :类型 指定返回值
* 可以使用return返回,使用return的时候必须指定返回值类型
* 4. 函数中的参数是val修饰的 不可变的
*/
object TestScalaFunction {
// main函数
def main(args: Array[String]): Unit = {
//1. 声明一个函数,接受int 类型的 a ,b 两个参数,返回值为int
def fun01(a: Int,b: Int) = {
// 最后一行是什么代表返回什么类型值(前提没指定返回类型)
a + b
}
println(fun01(23,3))
//2. 递归
def RecursionFun(num: Int): Int = {
if(num == 1) {
1
}else{
num + RecursionFun(num-1)
}
}
println(RecursionFun(10000))
// 3. 可变参数使用 *号;带有默认是的参数 使用 =号,例如 a:Int=10;
def fun02(a: Int*): Unit = {
// a.foreach(println)
// a.foreach(println(_))
// a.foreach(s => {print(s + "\t")})
for (elem <- a) {
print(elem + " \t")
}
}
fun02(12,12,23,34,34,343,34,45,45,56)
println()
// 4. 匿名函数
val fun03 = () => println("23232")
def fun04 = (str: String, str2: String) => {println(str + "-" + str2)}
fun03()
fun04("xiaoming","12")
println()
// 5. 偏应用函数
// localDateTime是java8中的时间,scala可以调用java中的类库
def log(date: LocalDateTime,name: String,log: String): Unit ={
println(date + " == : " + name +"操作了 "+log)
}
// 让log函数变为一个偏应用函数 是用_ 表示这个参数需要填写
val logto = log(LocalDateTime.now(),_: String,_:String)
logto("小明","添加")
logto("小明","删除")
logto("小明","修改")
/**
* 高阶函数
*/
//1. 参数为函数
def fun05(f01:(Int,Int) => Int,a:Int,b:Int,str:String): Unit = {
// 参数为function 直接能调用,具体实现由调用者实现
println(str + " 计算结果 = "+ f01(a,b) )
}
// 传入一个匿名函数,也可以声明一个函数传入
fun05((a,b)=>a+b,12,12,"小明")
//2. 返回值为函数
def fun06(a: Int,b: Int): () => String = {
if(a < b){
// 如果 a<0 实现一个函数
def f() = {
"a 小于 b"
}
// 返回这个函数
f
}else{
def f() = {
"a 大于 b"
}
f
}
}
println(fun06(-1,4)())
println(fun06(6,4)())
//3. 参数和返回值都包含函数
def fun07(f01:(Int,Int)=> Boolean,a:Int,b:Int): (String,String)=>String = {
var flag = f01(a,b)
if(flag){
def f(name1: String,name2: String):String ={
name1 + " 的分数大于 " + name2
}
f
}else {
def f(name1: String,name2: String):String ={
name1 + " 的分数小于 " + name2
}
f
}
}
println(fun07((a,b) => a > b,14,12)("小明","小红"))
//4. 特殊高阶函数(简化版 返回值是个函数 柯里化函数)
def fun08(f01:(Int,Int)=> Int,a:Int,b:Int)(int: Int) ={
f01(a,b) + int
}
def fun09(a: Int)(b: Int) ={
a+ b
}
println(fun08((a,b) => a - b,1,4)(10))
println((fun09(12)(23)))
}
}