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

How does one bind a method to a name in Kotlin?

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

How do I do the same with the method map, i.e. store it in f?

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

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

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

In Kotlin, the code snippet val f = println() binds the function println (which is a first class object) to the name f.

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

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