gpt4 book ai didi

function - 在 Kotlin 中分配给变量的 Lambda 表达式。为什么?

转载 作者:行者123 更新时间:2023-12-01 16:54:05 24 4
gpt4 key购买 nike

我注意到,如果定义这个简单的函数,我会得到相同的效果:

fun double ( i: Int ) = i*2

如果我定义一个变量并为其分配一个 lambda(具有相同的主体):

var double = { i : Int -> i*2 }

如果我使用任一声明调用double(a),都会得到相同的结果。这让我很困惑。什么时候需要、推荐、有利地将变量定义为 lambda 而不是为其定义函数?

最佳答案

When is it needed, recommended, advantageous to define a variable as a lambda rather than define a function to it?

只要您可以选择其中之一,就应该使用 fun 声明。即使有了fun,您仍然可以通过使用函数引用从中获取一流的可调用对象。

在 JVM 上,fun 在 RAM 和调用开销方面都明显更加轻量。它编译为 Java 方法,而 val 编译为实例字段 + getter + 实现函数式接口(interface)的合成类 + 您必须获取、取消引用和调用该类的单例实例方法就可以了。

只有当某些事情迫使您这样做时,您才应该考虑使用函数类型的 valvar。一个例子是,您可以动态替换 var 并有效地更改函数的定义。您还可能从外部接收函数对象,或者您可能需要遵守需要它们的 API。

无论如何,如果您曾经使用过类的函数类型属性,您就会知道为什么要这样做。

关于function - 在 Kotlin 中分配给变量的 Lambda 表达式。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52849768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com