kotlin - 如何在 Kotlin 中理解 = 的乐趣?

标签 kotlin

我知道一个标准的乐趣,就像代码 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/

相关文章:

lambda - 试图了解Kotlin示例

kotlin - 当 "when"语句未涵盖所有实现时,强制编译器发出错误

java - @Import - 注解参数必须是编译时常量

java - Spring webflux bean验证不起作用

android - 如何在 Kotlin Android 中从 JSON 中获取数据

android - 如何从 fragment “Kotlin”中移动 Activity

android - 如何使用 Kotlin 在 Android Studio 中的 RecyclerView 上添加 Onclick 监听器?

java - 在没有库的情况下转换为 JSONObject 并返回 Kotlin

Kotlin lambda/Java SAM 互操作 - 类型不匹配

android - 在 Android 上通过 BLE API 发送大文件