fun sum1(a: Int, b: Int): Int { //一般函數表示
return a + b
}
val int2Long2 = fun(x: Int): Long { //用常量承載匿名函數方式1
return x.toLong()
}
val sum2 = { a: Int, b: Int -> a + b } //單行lambda表達式1 (Int,Int) -> Int
val printHello = { println("This is it") } //單行lambda表達式2 () -> Unit
val sum3 = { //多行lambda表達式
arg1: Int, arg2: Int ->
//參數
println("$arg1 + $arg2 = ${arg1 + arg2}") //執行過程打印消息
arg1 + arg2 //返回值
} // (Int,Int) -> Int
fun main(args: Array<String>) {
println(sum3(2,3)) //調用函數1
println(sum3.invoke(2,3)) //調用函數2(與調用函數1一致)
args.forEach(::println) //遍歷方法1(最簡單的表達方法)
for (x in args) { //遍歷方法2
println(x)
}
args.forEach { //遍歷方法3
println(it)
}
/**
* 遍歷方法4,(與遍歷方法3一致)
* 在forEach方法中傳入lambda表達式,
* 傳入參數只有一個時默認是it,也可以不寫
*/
args.forEach({ it -> println(it) })
/**
* 遍歷方法5
* 當最后一個參數為lambda表達式的時候,
* 可以將遍歷方法4中的的()括號往前移
*/
args.forEach() { println(it) }
args.forEach {
if (it == "q") return //此時return的是main函數,之后的The End將不會輸出
println(it)
}
args.forEach A@{ //給forEach起一個標簽名A
if (it == "q") return@A //結束A標簽此時return的是forEach函數本身,main函數不會中斷
println(it)
}
println("The End")
/**
* 打印匿名函數時,有N參數就是實現了FunctionN接口, N的傳入的參數個數
*/
println(int2Long2)
println(sum3)
println(::printUsage) //打印具名函數(就是普通函數)需要在函數名前加::
}
運行結果