代码一:
def f1(f : ()=>Unit) : Unit = {
f()
}
f1(()=>{println("hello scala")})
输出结果为: hello scala
代码二:
当匿名函数中有参数时:
def f1(f : (Int)=>Int) : Int = {
f(10)
}
println(f1((x: Int) =>{x+10}))
输出结果为: 20
简化写法:
1.在匿名函数中,如果函数体只有一行代码. 那么就可以把花括号给省略.
(x : Int) => x+10
2.在匿名函数中,可以省略类型
(x) => x+10
3.在匿名函数中. 如果变量在函数体中只用过一次就可以把变量替换成_(下划线). 同时把=>给省略掉, 也把=>前面的类型给省略掉…
(x) => x+10 改写成 _+10
4.在匿名函数中, 如果有两个变量, 这两个变量各同时用过一次, 此时两个变量都替换成_(下划线). 同时把=>给省略掉.也把=>前面的类型给省略掉.
(x,y) => x+y 改写成 +
比如:
(i : Int) => {println(i)} 改写成 (i) => {println(i)}
(i) => {println(i)} 改写成 (i) => println(i)
(i) => println(i) 改写成 println(_)
println(_) 改写成 println
注意:
如果println(_)只有一个参数就可以省略成println. 如果在println语句里有两个变量,那么这两个变量是不能替换成_(下划线)
def f7(f : (Int, Int) => Unit) = {
f(1,2)
}
f7(println(_+_))是不能替换成_(下划线).会报错. 在println里只有一个变量可以省略成_(下划线), 如果在println里面有多个变量不可以省略成_(下划线), 多个变量在println里只能写变量名.
(x:Int, y:Int) => {x+y} 改写成 (x,y) => {x+y}
(x,y) => {x+y} 改写成 (x,y) => x+y
(x,y) => x+y 改写成 _+_
比如:
def f1(f : (Int, Int) => Int) : Int = {
f(10,10)
}
// 第一种
println(f1((x: Int, y: Int) => {x+y}))
// 第二钟
println(f1((x, y) => {x+y}))
//第三种
println(f1((x, y) => x+y))
//第四种
println(f1(_+_))
切记: println(_+_)是不行的,会报错. 只能println(_). 在println(_)基础上在可以改写成println,前提println(_)里面只有一个变量.