为什么 Kotlin 中函数不能直接用作 lambda?

2024-03-14

在 Kotlin 中我们不能写:

arrayOf(1,2,3).forEach(println)

但我们必须调用forEach using ::println。这是因为forEach期望一个 lambda,但是println是一个函数。为什么这些类型是不同的?Kotlin 没有像 Python 那样自动为我转换它,有什么充分的理由吗?

Update:

看来确实有区别。看着:

val addA: (Int)->Int = {it+1}
fun addB(i: Int) = i+1

fun main(args: Array<String>){
    var x: Int=0
    x.let(addA).let(::addB).let(::print)
}

lambda 不需要::,但该函数确实


我不认为 lambda 和函数是不同的类型。唯一存在的类型是function typelambda 是实例化函数的一种方式。文档中列出了获取函数类型实例的所有方法https://kotlinlang.org/docs/reference/lambdas.html#instantiating-a-function-type https://kotlinlang.org/docs/reference/lambdas.html#instantiating-a-function-type.

::println是获取对现有声明的引用的一种方法。所以你的问题是为什么需要使用::。也许只是为了在其他情况下以一致的方式获取函数引用,例如当您想要指向特定实例的成员的引用时foo::toString.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Kotlin 中函数不能直接用作 lambda? 的相关文章

  • 如何获取 Android 中其他应用程序的屏幕时间?

    我想达到在 Android 系统上运行的每个应用程序的屏幕时间 例如 Facebook 工作时间为 3 小时 但屏幕时间为 1 2 小时 我怎么才能得到它 android app usage 使用情况统计 public final clas
  • Jetpack Compose - 布局可重用组件

    为了练习 Jetpack Compose 中的可重用组件 我开始了一些练习 见下图 正如我想象的那样 绿色行 输入行以及之间的行具有相同的结构 第一个元素获得了可用空间 第二个元素获得了 50 dp 最后一个元素获得了 70 dp 我尝试将
  • Kotlin:乐趣与 val

    Kotlin 支持计算属性但我不确定何时使用它们 假设我有一堂课 class Car val color String 并有这个返回的函数true如果汽车是白色的 fun isWhite car Car Boolean return car
  • 具有自定义计数标准的 RxJava 缓冲区/窗口

    我有一个 Observable 它发出许多对象 我想使用以下方法对这些对象进行分组 window or buffer运营 但是 不是指定count用于确定窗口中应有多少对象的参数我希望能够使用自定义标准 例如 假设可观察对象正在发出 a 的
  • JobService 在 android 9 中不会重新安排

    我正在尝试让我的应用程序在 Android 9 上运行 以下代码在 Android 8 上运行良好 但由于某种原因 JobService 不会在 android 9 上重新安排 它第一次被安排 但不会根据到设定的周期 class Retri
  • “android.enableUnitTestBinaryResources”已弃用[重复]

    这个问题在这里已经有答案了 我刚刚更新了我的 Android Studio 现在当我构建我的项目时 我收到此错误 选项 android enableUnitTestBinaryResources 已弃用 这 当前默认值为 假 已从当前版本中
  • 如何将java库添加到kotlin本机

    所以我尝试使用intellij创建kotlin native应用程序 我在项目创建中选择了模板kotlin gt kotlin native 它创建了示例 gradle hello world 项目 下载所有依赖项后编译为exe文件并正常运
  • groovy 无法解析 kotlin 类

    由于我无法解决我遇到的问题kotlin 我决定回到groovy为了实现该插件 但是我遇到了这个问题 我有这样的项目结构 为了不重写所有类 我决定重用中实现的类kotlin 然而我的课FileProcessingCoreGroovy Down
  • Ktor 如何处理空响应

    我使用 Ktor 和这样的线路myentity client get url 从 API 响应获取并反序列化我的实体 当 API 返回某些内容时它工作正常 但是一旦 API 没有任何可返回的内容并发送 HTTP 204 响应 它就会失败并显
  • 如何在Android首选项中正确接收和存储本地目录/路径?

    我想存储一个本地路径 内部或外部存储 用户可以在其中存储一些数据作为 Android 应用程序中的首选项 我希望用户在首选项中选择一个首选文件夹 默认文件夹是context externalMediaDirs它返回一个File我将其绝对路径
  • RecyclerView 适配器的 Kotlin 泛型

    我正在尝试编写一个通用的 recyclerview 适配器 我找到了几个例子 然而 仍然无法弄清楚如何实现通用适配器 我写的代码是 open abstract class BaseAdapter
  • 在 Kotlin 中实现返回 Collection 的 Java 方法

    我将 Kotlin 与 Spring Security 结合使用 实现该方法时 public interface UserDetails extends Serializable Collection
  • Android Mockito.verify 说参数不同!打印相同内容

    情况 我有一个界面Tracker其中有这个方法 fun trackEvent event String args Bundle null 我想验证是否使用特定的调用此方法event 被测试的内部对象调用此方法Bundle目的 所有事件都指定
  • LazyColumn - Items 关键参数的用途?

    有人可以解释一下它的主要目的是什么吗 key LazyListScope 的 items itemsIndexed 函数内的参数 如果我们指定该参数 我们会得到什么或不会得到什么 我不确定我是否理解与此参数相关的官方文档 key 代表该项目
  • 如何将 Android Room 数据库中的 Not Null 表列迁移为 Null

    我是 Android 房间库的新手 我需要将 Not Null 列迁移到 Null 但房间迁移只允许在 ALTER 表查询中添加或重命名 如何执行列迁移查询 Entity tableName vehicle detail data clas
  • 如何从DataSource.Factory获取数据

    我必须调用此方法才能获取所有人员 我根本无法修改这个方法 Query SELECT FROM PERSON TABLE ORDER BY NAME DESC abstract fun getElements DataSource Facto
  • 如何使用 kotlin Android 从 Url 读取 JSON?

    我正在使用 kotlin 来开发应用程序 现在我想从服务器获取 JSON 数据 在java中 我实现了Asyntask以及Rxjava来从Url读取JSON 我也在谷歌搜索 但我无法获得满足我的要求的正确详细信息 如何使用 kotlin 从
  • 如何使 FirebaseAuth.AuthStateListener 在 Kotlin 中工作?

    class LoginActivity AppCompatActivity private val firebaseAuth FirebaseAuth getInstance private val firebaseAuthListener
  • 更新到 Kotlin 1.3.30 后出现“未解析的引用:Parcelize”

    我使用 Kotlin 1 3 21 很长时间了kotlin android extensions插件长期处于实验模式 今天我通过升级版本切换到 Kotlin 1 3 30 现在无论我使用什么 Parcelize注释我看到错误 Unresol
  • 如何在 IntelliJ Kotlin 项目中使用条件断点动态调试变量时更改值?

    在 Java 项目中 通过 mis 调试时可以实现这一点 使用条件断点为属性或变量设置值 Java断点 https i stack imgur com I4JL2 png 不幸的是 同样的事情在 Kotlin 项目中是不可能的 错误是 赋值

随机推荐