package scala
object FunctionTest {
def main(args: Array[String]): Unit = {
/**
* def max(x:Int,y:Int):Int = {
* if(x > y)
* x
* else
* y
* }
*/
//1.值函数
//函数字面量
//=>左侧表示输入,右侧表示转换操作
val inc = (x:Int) => x + 1
println(inc(10))
//函数定义:等价于上面
def increase(x:Int) = x + 1
println(increase(10))
//函数定义:多语句
val inc2 = (x:Int) => {
println("good");
println("good");
println("study");
x + 1
}
println(inc2(10))
//数组的map方法调用(方法一)
println(Array(1,2,3,4).map(increase).mkString(","))
//2.匿名函数
//数组的map方法调用(方法二)
println(Array(1,2,3,4).map((x:Int)=>x+1).mkString(","))
//数组的map方法调用(方法三)
println(Array(1,2,3,4).map{(x:Int)=>x+1}.mkString(","))
//数组的map方法调用(方法四)
println(Array(1,2,3,4) map{(x:Int)=>x+1} mkString(","))
//参数类型推断写法(方法五)
println(Array(1,2,3,4) map{(x)=>x+1} mkString(","))
//函数只有一个参数的话,可以省略()(方法六)
println(Array(1,2,3,4) map{x=>x+1} mkString(","))
//如果参数右边只出现一次,则可以进一步简化(方法七)
println(Array(1,2,3,4) map{_+1} mkString(","))
//值函数简化方式
val fun1 = 1 + (_:Double)
println(fun1(999))
//值函数简化方式(二)
val fun2:(Double) => Double = 1 + _
println(fun2(999))
//3.函数参数
//高阶函数
def int2Str(f:(Int) => String) = f(4)
println(int2Str((x:Int) => x + " s"))
//高阶函数可以产生新函数
def multiBy(factor:Double) = (x:Double) => factor * x
val x = multiBy(10)(50)
println(x)
//4.函数闭包
//运行时确定more类型及值的函数称为闭包
var sum = 0
List(1,2,3,4,5).foreach(sum += _)
println(sum)
}
}
参考自:https://blog.youkuaiyun.com/column/details/scalalearning.html