[英]Anonymous Functions: Regular call VS Shorthand Syntax
我是 Kotlin 的新用戶。
我對匿名函數進行了一些試驗,直到使用不同的方法面對同一概念的不同輸出。
var greetingFunction = { playerName: String , numBuildings: Int ->
val currentYear = 2022
println("Adding $numBuildings houses")
"Welcome to SimVillage, $playerName! (Copyright $currentYear)\n"
}
private fun runSimulation(playerName: String, greetingFunc: (String, Int) -> String){
val numOfBuildings = (1..3).shuffled().last()
println(greetingFunc(playerName, numOfBuildings))
}
A- 定期撥打匿名電話 function:
println(runSimulation("Ahmed", greetingFunction))
Output:
Adding 3 houses
Welcome to SimVillage, Ahmed! (Copyright 2022)
B- 匿名撥打電話 function:
println(runSimulation("Different") { playerName: String , numBuildings: Int ->
val currentYear = 2022
println("Adding $numBuildings houses")
"Welcome to SimVillage, $playerName! (Copyright $currentYear)\n"
})
Output:
kotlin.Unit
Adding 2 houses
Welcome to SimVillage, Different! (Copyright 2022)
kotlin.Unit
我試圖刪除println()
並直接調用runSimulation function,而 output 是:
Output:
kotlin.Unit
Adding 2 houses
Welcome to SimVillage, Different! (Copyright 2022)
我真正想知道的是:首先我是如何使用速記語法打印“kotlin.Unit”的?
Kotlin 會自動推斷匿名函數的類型。 由於greetingFunction
的最后一行是一個字符串
var greetingFunction = { playerName: String , numBuildings: Int ->
val currentYear = 2022
println("Adding $numBuildings houses")
// the last line is a string -> Kotlin will infer that the return type is a String
"Welcome to SimVillage, $playerName! (Copyright $currentYear)\n"
}
推斷的類型是
var greetingFunction: (String, String) -> String
不推斷塊體函數的返回類型。 如果 function 沒有返回有用的值,則其返回類型為Unit
。 function
private fun runSimulation(playerName: String, greetingFunc: (String, Int) -> String) {
val numOfBuildings = (1..3).shuffled().last()
println(greetingFunc(playerName, numOfBuildings))
}
因此將返回Unit
,所以
println(runSimulation("foo") { _, _ -> "bar" })
會打印runSimulation()
的返回值, Unit.toString()
為kotlin.Unit
由於runSimulation()
也會打印到標准輸出,這實際上與運行相同
println(println("bar"))
首先,“內部” println()
將打印 output bar
,然后“外部” println()
將打印kotlin.Unit
。
bar
kotlin.Unit
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.