Могу ли я сделать изменяемую коллекцию функций в Kotlin без их запуска? - PullRequest
0 голосов
/ 07 октября 2019

В Python я могу создать словарь ключевых слов функций и вызывать их ключи без запуска других функций в словаре. Есть ли эквивалент Котлина?

Я создал 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()

В то время как в Kotlin я могу думать только о:

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 функции выполняются независимо от того, отображается карта или нетключ, которому они назначены, выбран. Могу ли я сделать карту, которая работает так же, как словарь в Python?

1 Ответ

5 голосов
/ 07 октября 2019

Прямо сейчас вы вызываете a и b при создании карты. Вы можете передавать ссылки на функции вместо вызова их. Но вы должны вызвать его позже:

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

также вы можете заключить каждую функцию в еще одну лямбду:

val functionMap = mutableMapOf(1 to { a() }, 2 to { b() })
functionMap[1]!!() // prints Hi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...