Scala学习笔记-09-函数式编程-匿名函数

方法定义:

def 方法名(参数名:参数类型):返回结果类型 = {方法体}

## 非匿名函数的定义和使用
# 函数名为add,入参为Int类型的x,函数返回值 Int,函数体为 x+1
scala> def add(x:Int):Int = {x + 1} add: (x: Int)Int scala> add(3) res17: Int = 4 ## 匿名函数的定义和使用
# 匿名函数(x)=>x+1 【也成为函数字面量】赋值给 add 变量,add的类型是 Int=>Int
# 如果匿名函数的入参只有1个,则可省略(),写成 x=>x+1
# 1个参数 scala> val add:Int=>Int = {(x)=>x+1} add: Int => Int = <function1> scala> add(3) res18: Int = 4

# 2个入参
scala> val add:(Int,Int)=>Int = {(x,y)=>x+y+10}
add: (Int, Int) => Int = <function2>

scala> add(5,3)
res14: Int = 18

# 0个入参
scala> val javaHome:()=>String = {()=>System.getProperty("java.home")}
javaHome: () => String = <function0>

scala> println(javaHome) #打印方法名
<function0>

scala> println(javaHome())
/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre #打印方法调用后的值


## 使用类型推断系统,可以省略函数类型
# 根据匿名函数中参数的类型,自动推断出匿名函数返回值的类型 scala> val add = {(x:Int)=>x+1}
add: Int => Int = <function1>

scala> add(3)
res19: Int = 4

占位符语法:

当函数的每个参数在函数字面量内仅出现一次,可以省略=>并使用下划线"_"作为参数占位符,第一个下划线代表第一个参数,第二个下划线代表第二个参数...

scala> val add = (_:Int)+1 //类型不能省略,否则无法使用类型推断
add: Int => Int = <function1>
scala> add(3)
res20: Int = 4

scala> val add = (_:Int) + (_:Int) //类型不能省略,否则不能使用类型推断
add: (Int, Int) => Int = <function2>

scala> add(3,4)
res21: Int = 7

猜你喜欢

转载自www.cnblogs.com/wooluwalker/p/12306979.html