Kotlin 中 println 前的双冒号是什么意思

Eme*_*kpo 5 kotlin

println下面的 Kotlin 代码中前面的双冒号是什么意思?

class InitOrderDemo(name: String) {
   val firstProperty = "First property: $name".also(::println)
}
Run Code Online (Sandbox Code Playgroud)

代码打印:

第一个属性:你好

O.B*_*adr 7

来自Kotlin 文档的 ::意思是:

创建成员引用或类引用。

在您的示例中,它与成员引用有关,因此您可以将函数作为参数传递给另一个函数(又名First-class function)。

如输出所示,您可以看到使用字符串值also调用println,因此该also函数可能会在调用之前检查某些条件或进行一些计算println。您可以使用lambda 表达式重写您的示例(您将获得相同的输出):

class InitOrderDemo(name: String) {
   val firstProperty = "First property: $name".also{value -> println(value)}
} 
Run Code Online (Sandbox Code Playgroud)

您还可以编写自己的函数来接受另一个函数作为参数:

class InitOrderDemo(name: String) {
    val firstProperty = "First property: $name".also(::println)
    fun andAlso (block : (String) -> Int): Int{
        return block(firstProperty)
    }
}

fun main(args : Array<String>) {
    InitOrderDemo("hello").andAlso(String::length).also(::println) 
}
Run Code Online (Sandbox Code Playgroud)

将打印:

第一个属性:你好

21