我可以在不运行Kotlin的情况下收集可变的功能吗?

时间:2019-10-07 17:01:40

标签: kotlin lambda collections

在Python中,我可以创建功能关键字的字典并调用其键,而无需运行该字典中的其他功能。有相当于Kotlin的东西吗?

我创建了一个mutableMapOf(1到a(),2到b()),该函数可以部分工作,但是即使未调用其键,这两个函数也会每次运行。在Python中,我可以说:

def a(): print("Hi")
def b(): print("Bye")

function_dictionary = {1: a, 2: b} 
function_dictionary[1]() //runs a()

在科特林,我只能想到:

fun a(){println("Hi")}
fun b(){println("Bye")}

val functionMap = mutableMapOf<Int, Unit>(1 to a(), 2 to b()) //a() and b() both run 
functionMap[1] //runs a() again

在Kotlin示例中,无论是否选择了分配给它们的地图键,这些功能都会运行。我可以制作出与字典中的字典相同的地图吗?

1 个答案:

答案 0 :(得分:5)

现在,您正在创建地图时调用ab。您可以将引用传递给函数,而不是调用它们。但是您必须稍后明确调用它:

val functionMap = mutableMapOf(1 to ::a, 2 to ::b)
functionMap[1]!!() // prints Hi

此外,您还可以将每个函数包装在一个lambda中:

val functionMap = mutableMapOf(1 to { a() }, 2 to { b() })
functionMap[1]!!() // prints Hi