试图理解科特林示例



我想学习kotlin,并正在努力进行示例try.kotlinlang.org

我很难理解一些示例,尤其是懒惰的属性示例:https://try.kotlinlang.org/#/examples/delegated properties/lazy property/lazy property.kt

/**
 * Delegates.lazy() is a function that returns a delegate that implements a lazy property:
 * the first call to get() executes the lambda expression passed to lazy() as an argument
 * and remembers the result, subsequent calls to get() simply return the remembered result.
 * If you want thread safety, use blockingLazy() instead: it guarantees that the values will
 * be computed only in one thread, and that all threads will see the same value.
 */
class LazySample {
    val lazy: String by lazy {
        println("computed!")
        "my lazy"
    }
}
fun main(args: Array<String>) {
    val sample = LazySample()
    println("lazy = ${sample.lazy}")
    println("lazy = ${sample.lazy}")
}

输出:

computed!
lazy = my lazy
lazy = my lazy

我不明白这里发生的事情。(可能是因为我真的不熟悉lambdas)

  • 为什么println()仅执行一次?

  • 我也对"我的懒惰"一词感到困惑字符串未分配给任何内容(字符串x ="我的懒惰")或用于返回(返回"我的懒惰)

有人可以解释吗?:)

为什么println()仅执行一次?

发生这种情况是因为您第一次访问它,它是创建的。要创建,它调用您仅通过一次并分配值"my lazy"的lambda。您在Kotlin中编写的代码与此Java代码相同:

public class LazySample {
    private String lazy;
    private String getLazy() {
        if (lazy == null) {
            System.out.println("computed!");
            lazy = "my lazy";
        }
        return lazy;
    }
}

我也对"我的懒惰"行感到困惑 到任何东西(字符串x ="我的懒惰")或用于返回(返回"我的我的 懒)

Kotlin支持Lambda的隐式回报。这意味着lambda的最后一个陈述被认为是其回报值。您还可以使用return@label指定明确的返回。在这种情况下:

class LazySample {
    val lazy: String by lazy {
        println("computed!")
        return@lazy "my lazy"
    }
}

相关内容

  • 没有找到相关文章

最新更新