Lambda分配给Kotlin中的变量.为什么?

Dak*_*ine 3 variables lambda function kotlin

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

fun double ( i: Int ) = i*2
Run Code Online (Sandbox Code Playgroud)

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

var double = { i : Int -> i*2 }
Run Code Online (Sandbox Code Playgroud)

如果我double(a)使用任何一个声明调用,我会得到相同的结果.这让我感到困惑.何时需要,推荐,有利的是将变量定义为lambda而不是定义函数?

Mar*_*nik 7

何时需要,推荐,有利的是将变量定义为lambda而不是定义函数?

无论何时选择任何一种,都应该使用fun声明.即使使用a,fun你仍然可以通过使用函数引用从中获取第一类可调用对象.

在JVM上,a fun在RAM和调用开销方面都明显更轻量级.它编译成Java方法,而val编译成实例字段+ getter +实现功能接口的合成类+该类的单例实例,您必须获取,取消引用并调用其上的方法.

你应该考虑一个函数类型,val或者var只有当某些东西强迫你这样做时.一个例子是您可以动态替换var并有效地更改函数的定义.您也可以从外部接收函数对象,或者您可能需要遵守需要它们的API.

在任何情况下,如果您使用类的函数类型属性,您就会知道为什么要这样做.