通常,方法是有方法名的,比如下面一個(gè)求和函數(shù):
fun sum(arg1: Int,arg2: Int): Int {
return arg1+arg2
}
傳入2個(gè)int類型參數(shù)旱物,返回一個(gè)int類型值。如果去掉方法名卫袒,改成一個(gè)匿名函數(shù),匿名函數(shù)需要聲明變量接收:
val sum = { arg1: Int,arg2: Int ->arg1+arg2 }
大括號里面的就是fun sum 改變后的匿名函數(shù)夕凝,參數(shù)和返回值用->分割讽营,但是->不是必須的:
val printInHello = {
println("Hello")
}
打印“Hello”的表達(dá)式,因?yàn)闆]有參數(shù)堪藐,所以->省略礁竞。
這個(gè)匿名函數(shù)就是lambda表達(dá)式模捂。返回值是表達(dá)式的方法體最后一行狂男。
通過forEach了解表達(dá)式:
/**
* Performs the given [action] on each element.
*/
public inline fun <T> Array<out T>.forEach(action: (T) -> Unit): Unit {
for (element in this) action(element)
}
forEach后面的()里面是這個(gè)方法的參數(shù)岖食,而這個(gè)參數(shù)也是一個(gè)表達(dá)式析珊。++action: (T) -> Unit++
這個(gè)表達(dá)式的返回類型是Unit忠寻。也就是java的void方法奕剃。說明forEach是無參的祭饭。而后面 ++:Unit++是整個(gè)方法的返回值倡蝙。也是Unit類型的。然后看方法體胆建,是一個(gè)for循環(huán)笆载。然后調(diào)用action。
遍歷數(shù)組:
args.forEach {
print(it)
}