Intereting Posts
Прослушивание сообщений и написание команд по наблюдаемому потоку 'x' не является функцией при передаче параметров в Kotlin Javascript Предупреждение о компиляторе Android Studio Kotlin Ошибка плагина Kotlin: не удалось создать прокси-класс для класса org.jetbrains.kotlin.gradle.tasks.KotlinCompile Обращение к инфиксному логическому результату kotlin В Kotlin, как я могу обойти конфликты наследуемых объявлений, когда класс enum реализует интерфейс? Ошибка Kotlin: Кинжал не поддерживает инъекцию в частные поля Почему var foo = null компилируется Поделитесь модулем Kotlin с проектом Android и Desktop LMAX Disruptor с Kotlin: нельзя использовать лямбда? Невозможно решить ошибку «Content-Length and stream length notagree» Котлин: Итерации через JSONArray Почему анимация выхода фрагмента не работает? Почему URL ("http://pboss.pozit.pl/contact.html") .readText () делает сбой приложения для Android? Не удалось загрузить ошибку класса kotlin.collections.CollectionsKT при попытке синхронизации градиента

Можно ли сопоставить функцию более высокого порядка в котлине с строкой

Я должен выполнить асинхронный запрос, а затем сообщить результат слушателям.

fun connectToTopic(topic:String, body:(topic:String, data : ByteArray ) -> Void){ topicCallbackMap.put(topic, body) // is this possible??? } 

Я хочу создать карту из «темы» в функцию более высокого порядка, чтобы я мог вызвать конкретную функцию более высокого порядка для определенной темы, например

 private val topicCallbackMap: Map<String, body:(topic:String, data : ByteArray ) -> Void> 

Вышеупомянутый неверный код, просто хотел дать сущность.

То, что я хочу, может быть легко достигнуто с помощью прослушивателя интерфейса, но я хотел знать, возможно ли это в Котлине. Спасибо.

Возможно. В коде есть только некоторые синтаксические ошибки. И обратите внимание, что вам нужна MutableMap , чтобы поместить ценность в карту.

 private val topicCallbackMap = mutableMapOf<String, (String, ByteArray) -> Unit>() fun connectToTopic(topic:String, body: (String, ByteArray) -> Unit) { topicCallbackMap.put(topic, body) //OR topicCallbackMap[topic] = body } 

да это возможно:

 val functionMap: Map<String, (Int) -> Int> = mapOf("a2" to { a: Int -> a * 2 }, "a3" to {a: Int -> a * 3} ) fun execute(a: Int, myBlock: (Int) -> Int) { println( myBlock(a) ) } 

Чем вы можете получить эту функцию из карты и использовать ее в качестве параметра для другой функции:

 val fun1 = functionMap["a2"] if (fun1 != null) { execute(3, fun1) }