我知道一个标准的乐趣,就像代码 0 一样。
代码1是网页的示例代码,我完全看不懂
fun convertFromDomain(forecast: ForecastList) = with(forecast) {...}
为什么要加上符号=才好玩呢?有趣的 convertFromDomain 单元的返回值是什么?
代码 0
fun My(forecast: ForecastList):Boolean {
...
return true;
}
代码 1
data class ForecastList(val id: Long, val city: String, val country: String, val dailyForecast: List<Forecast>) {
val size: Int
get() = dailyForecast.size
operator fun get(position: Int) = dailyForecast[position]
}
data class Forecast(val id: Long, val date: Long, val description: String, val high: Int, val low: Int,
val iconUrl: String)
fun convertFromDomain(forecast: ForecastList) = with(forecast) {
val daily = dailyForecast.map { convertDayFromDomain(id, it) }
CityForecast(id, city, country, daily)
}
最佳答案
block 体
考虑这个函数:
fun sum(a: Int, b: Int): Int {
return a + b
}
行为在 block 体中定义。它具有显式返回类型 (Int
) 和显式 return
语句。 两者都是强制性的。如果您没有明确指定返回类型,默认情况下它将是 Unit
,因为 a + b
的推断类型> 是 Int
它不会编译。
表达式体
如果这样写
fun sum(a: Int, b: Int) = a + b
你不需要指定返回类型,因为它可以从表达式中推断出来。你也不需要 return 语句,因为返回了最后一个表达式。 =
符号后面的内容称为表达式主体。
所以,这两个函数做同样的事情。第二个只是写得更简洁。
注意
一个常见的错误是像这样同时使用它们:
fun sum(a: Int, b: Int) = { a + b }
如果您明确指定返回类型,这将做什么变得很清楚:
fun sum(a: Int, b: Int): () -> Int = { a + b }
您实际上会返回类型为 () -> Int
的 lambda,这肯定不是您想要的。
关于kotlin - 如何在 Kotlin 中理解 = 的乐趣?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46484337/