本文共 2685 字,大约阅读时间需要 8 分钟。
代码示例
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))) }}
转载地址:http://obwt.baihongyu.com/