微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Kotlin 中如何将方法绑定到名称?

如何解决在 Kotlin 中如何将方法绑定到名称?

在 Kotlin 中,代码片段 val f = println()函数 println(它是第一类对象)绑定到名称 f

如何对方法 map 执行相同操作,即将其存储在 f 中?

语法 val f = map 不起作用,val f = arrayOf(1,2,3).map 也不起作用。我尝试了上述的各种变体,但都没有成功。

另外(和相关的),为什么 val f = println 不起作用,需要括号?我来自函数式编程阵营(Scheme),在那里这绝对是正常的。

(免责声明:绝对 Kotlin 新手,努力自学。)

解决方法

在 Kotlin 中,代码片段 val f = println() 将函数 println(它是第一类对象)绑定到名称 f

不是真的。这将调用 println() 的返回值结果,即 Unit,分配给变量 f。要获取函数引用,请使用 ::。但是还必须指定变量类型,因为函数有重载时无法推断:

val f: (Any)->Unit = ::println

应使用接收类型指定带有接收器的函数,例如

val f = Any::toString

// or,to bind a specific instance's toString:
val myList = listOf("Hello","World")
val myListToString = myList::toString

由于 map 是一个高阶函数,它有一个长而复杂的签名:

val f: Array<Int>.((Int)->String)->List<String> = Array<Int>::map

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。