我正在研究溫度控制問題的解決方案。這是 Kotlin 學習基礎的問題之一。因此,對于 printFinalTemprature 函式中的第三個引數,我傳遞了一個名為 conversionFormula 的函式,但是無論我做什么,我都不斷收到型別不匹配錯誤。我錯過了什么?
fun main() {
var temp : Double = 10.0
fun celsiusToFahrenheit(celsius : Double): Double {
return 9/5 * (celsius) 32
}
fun kelvinToCelsius(kelvin : Double):Double {
return kelvin - 273.15
}
fun conversionFormula(fahrenheit: Double): Double {
var fiveNine :Double = 0.56
var result :Double = (fiveNine*(fahrenheit - 32.0) 273.15)
return result
}
printFinalTemperature(temp, "Kelvin", "Celsius", conversionFormula(temp))
}
fun printFinalTemperature(
initialMeasurement: Double,
initialUnit: String,
finalUnit: String,
conversionFormula: (Double) -> Double
) {
val finalMeasurement = String.format("%.2f", conversionFormula(initialMeasurement)) // two decimal places
println("$initialMeasurement degrees $initialUnit is $finalMeasurement degrees $finalUnit.")
}
uj5u.com熱心網友回復:
您只需要切換傳遞函式的方式。一切都是 Kotlin 中的運算式,并且由于您printFinalTemperature
期望函式作為最終引數,因此您有兩種方法可以完成此操作。
第一種是使用函式參考 with ::
。這僅在您參考的函式具有相同的預期簽名時才有效,因此在這種情況下(Double) -> Double
. 您可以嘗試將其中一個更改Double
為Int
,您會看到它是如何中斷的。
printFinalTemperature(temp, "Kelvin", "Celsius", ::conversionFormula)
其次,您可以傳入一個 lambda 作為最后一個引數,允許它“推斷”該函式是正確的簽名。
printFinalTemperature(temp, "Kelvin", "Celsius") {
conversionFormula(it)
}
在這種情況下,it
來自 lambda 作為默認引數名稱。您可以給它一個明確的名稱,例如:
printFinalTemperature(temp, "Kelvin", "Celsius") { newTemp ->
conversionFormula(newtemp)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/516813.html
標籤:科特林
上一篇:鏈驗證失敗
下一篇:以這種方式使用列舉是否合適?