如何解决在 Kotlin 中如何将方法绑定到名称?
在 Kotlin 中,代码片段 val f = println()
将函数 println
(它是第一类对象)绑定到名称 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 举报,一经查实,本站将立刻删除。