println之前的双冒号在kotlin中是什么意思

时间:2018-08-11 22:03:50

标签: kotlin

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

class InitOrderDemo(name: String) {
   val firstProperty = "First property: $name".also(::println)
}

代码显示:

  

第一个属性:你好

2 个答案:

答案 0 :(得分:2)

来自Kotlin documentation ::的意思是:

  

创建成员引用或类引用。

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

如输出所示,您可以看到also用字符串值调用了println,因此also函数可能会在调用{{1 }}。 您可以使用lambda expression您将获得相同的输出)来重写示例:

println

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

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

将打印:

  

第一个属性:你好

     

21

答案 1 :(得分:-1)

双冒号,只是kotlin惯用的方式来调用拥有对象的引用

class InitOrderDemo(name: String) {
   val helicopter : String = "BlackWater"
   fun wheresHeli() : String{
     return ::helicopter // this Kotlin Idiomatic way of doing calling from that live object(Object thats in memory
// In other languages you write return this.helicopter
   }
}