一、函数的定义
代码示例:
package functionDemo /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/8/23 * @time : 2:14 下午 */ object FunctionDemo1 { // 实现加法的功能 val f1 = ((a:Int,b:Int) =>{a+b}) val f2 = (a:Int,b:Int) =>{a+b} val f3 = (_:Int)+(_:Int) val f4:(Int,Int)=>Int = (_+_) val f5:((Int,Int)=>Int)=((x,y)=>x+y) val f6 = new Function2[Int,Int,Int] { override def apply(v1: Int, v2: Int): Int = v1+v2 } def main(args: Array[String]): Unit = { // 函数调用 val res = f1(10,20) println(res) val res2 = f6(100,100) println(res2) } }
运行结果:
30 200
二、匿名函数
代码示例:
package functionDemo /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/8/23 * @time : 6:08 下午 */ object FunctionDemo2 { // 定义一个匿名函数 (x:Int)=>x+10 val f1 = (x:Int)=>x+10 val f2 = (x:Int,y:Int)=>x*y def main(args: Array[String]): Unit = { // 调用匿名函数 println(f1(30)) println(f2(10,10)) } }
运行结果:
40 100
三、递归函数
代码示例:
package functionDemo /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/8/23 * @time : 7:06 下午 */ object FunctionDemo3 { // 定义一个递归函数 // 实现一个数学上阶乘的功能:3!=1*2*2 4!=4*3! // 递归函数的返回值类型要指定 val factorial:Int=>Int=(n)=>{ if (n<1) 1 else n * factorial(n-1) } def main(args: Array[String]): Unit = { println(factorial(10)) } }
运行结果:
3628800
四、无参函数
代码示例:
package functionDemo /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/8/23 * @time : 7:13 下午 */ object FunctionDemo4 { // 定义一个无参函数,参数括号不能省略 val getAnswer = () => "success" def main(args: Array[String]): Unit = { // 无参函数的调用 println(getAnswer()) println(getAnswer) } }
运行结果:
success functionDemo.FunctionDemo4$$$Lambda$1/1349393271@3f0ee7cb
五、方法和函数的区别联系
1.方法和函数的定义语法不同
def 方法名(参数列表):返回类型=方法体
val 变量 = (函数参数列表)=> 函数体
2.方法一般定义在某个类,特质,或者object中
3.方法可以共享使用所在类的属性
将方法转换为函数
将方法作为参数传给另一个方法或者函数的时候,方法被转化为函数
使用神奇的下划线_
代码示例:
package functionDemo /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/8/23 * @time : 7:45 下午 */ object FunctionDemo5 { def method1(x:Int,y:Int) = x+y def main(args: Array[String]): Unit = { val res1 = method1(10,10) // 方法转化为函数 _ val res2 = method1 _ println(res1) println(res2(20,10)) // 方法作为参数传给另一个方法或者函数,系统会自动把方法转化为函数 } }
运行结果:
20 30