Tag: лямбда

Kotlin lambdas и тип вывода

Я выполнил следующее перечисление в Котлине enum class PlaylistAction(val playlistFilter:(Playlist) -> Boolean) { PLAY ({ it.playListOwner.Id == "xxx" }), SAVE({true}) } Я хотел бы использовать его для фильтрации списка следующим образом: var test = playlists.filter { playlistActionType.playlistFilter} где playlistActionType имеет тип PlaylistAction а плейлисты – это List<Playlist> Но я получаю следующую ошибку: Ошибка: (122, 34). […]

Когда лямбда-параметры должны быть noinline в Котлин?

Я часто сталкиваюсь с ошибками в замкнутых функциях Котлина, где параметры лямбда должны быть отмечены noinline . В других случаях параметры лямбда, похоже, работают нормально. Я прочитал документацию Котлина о встроенных функциях , и, похоже, это оперативный проход, объясняющий правило: Inlinable lambdas может быть вызван только внутри встроенных функций или передан как встроенные аргументы, но […]

Котлин: лямбда никогда не компилируется

Я только начал изучать Kotlin, и у меня возникла проблема с синтаксисом lambdas. Существует небольшой примерный класс: class MathFunctions { @FunctionalInterface interface Operation { fun calculate(a: Int, b: Int): Int } fun makeCalculations(a: Int, b: Int, operation: Operation): Int = operation.calculate(a, b) companion object { @JvmStatic fun main(args: Array<String>) { val plus = Operation { […]

Функция для выражения лямбда

У меня есть класс данных, и мне нужно инициализировать List<String> . Мне нужно получить значения JsonArray (я использую Gson). Я сделал эту функцию: private fun arrayToList(data: JsonArray, key: String): List<String> { val list = mutableListOf<String>() data.forEach { a -> list.add(a[key].asString) } return list } Как я могу преобразовать в работу как выражение лямбда? Благодарю.

Почему у Kotlin есть два синтаксиса для lambdas / анонимных функций?

У Котлина есть два способа объявления анонимной функции (ака лямбда). Два разных синтаксиса: val lambda = { input : String -> "received ${string}" } а также val anonymousFunction = fun (input : String): String { return "received ${string}" } Я понимаю разницу между ними (как указано в этом ответе ), но я не понимаю, почему […]

Передача функций в Котлин

Я начинаю использовать Vaadin с Kotlin и создал следующий метод расширения: fun AbstractComponentContainer.addButton(buttonText : String = "", icon : FontIcon? = null, function : (() -> Unit)? = null) { val button = Button(buttonText) if (icon != null) { button.icon = icon } if (function!=null) { button.addClickListener { function() } } this.addComponent(button) } Это позволяет […]

LMAX Disruptor с Kotlin: нельзя использовать лямбда?

Например, в Java я могу сделать это с помощью LMAX disruptor: Disruptor<NetworkEvent> disruptor = new Disruptor<>(NetworkEvent::new, 2048, Executors.newSingleThreadedExecutor()); В Котлин я пробую этот эквивалент: val disruptor = Disruptor<NetworkEvent>({ NetworkEvent() }, 2048, Executors.newSingleThreadExecutor()) Но меня приветствует эта ошибка:

Хранить лямбда в переменной в котлин

Я начинаю развиваться в Android с kotlin, и у меня проблема с лямбдами. У меня есть функция установки слушателя в моем представлении, это выглядит так: fun setListener(listener: () -> Unit) { } Проблема в том, что код, переданный как lambda, не будет выполняться в функции setListener, он будет выполнен в другой части моего кода (в […]

Что такое Лямбда с приемником?

Что такое Лямбда с приемником в Котлине, а у нас есть функции расширения? Две приведенные ниже функции выполняют одни и те же вещи, однако первый из них более читабельный и короткий: fun main(args: Array<String>) { println("123".represents(123)) println(123.represents("123")) } fun String.represents(another: Int) = toIntOrNull() == another val represents: Int.(String) -> Boolean = {this == it.toIntOrNull()}

Почему я могу использовать имя выражения лямбда, но не имя функции?

Я могу определить «большую» функцию, используя «маленькую» функцию: fun apply3(a:Int, b:Int, c:Int, func: (Int,Int,Int)->Int ): Int{ return func(a,b,c) } Я могу назвать это так: println(apply3(1,2,3,{a,b,c->a+b+c})) С другой стороны, если я хочу использовать одну и ту же функцию несколько раз и использовать имя для нее, у меня есть проблемы: val plus1: (Int,Int,Int)->Int = {a,b,c->a+b+c} //this is […]

Давайте будем гением компьютера.