169 похожих чатов

Ребят, подскажите, во что превращается лямбда при компиляции?

17 ответов

10 просмотров

Зависит от настроек компилятора.

Alex
всмысле?)))

Если передавать компилятору разные флаги, то байт-код для лямбды получается разный.

Вообще проще всего декомпилировать и посмотреть. Ярослав прав, там бывают разные случаи. Инлайн лямбды вообще ни во что превращаются.

А вам зачем? Просто если ради интереса - это одно, а если вы попытаетесь на это завязаться при работе с ними, то не советую, так как это нарушение абстракции.

Andrey Antipov
А вам зачем? Просто если ради интереса - это одно,...

Есть же наследование от лямбд, для чего это вообще?

Elisey Budnitsky
Есть же наследование от лямбд, для чего это вообще...

В смысле наследование от лямбд? Лямбда или анонимная функция - объект. В Котлин нет прототипного наследования, поэтому не понимаю, какое такое наследование от лямбд?

Elisey Budnitsky
class A: () -> Unit{}

Это класс, реализующий функциональный тип () -> Unit

Andrey Antipov
Это класс, реализующий функциональный тип () -> Un...

Я понимаю, но разве это не будет нарушением абстракций?

Elisey Budnitsky
Я понимаю, но разве это не будет нарушением абстра...

Нет. Функциональный тип () -> Unit - тип любой функции (лямбды, анонимки, ссылки на функцию), которая не принимает параметров и возвращает Unit

Andrey Antipov
Нет. Функциональный тип () -> Unit - тип любой фун...

А можете привести пример, где лучше использовать этот вариант, чем переопределение оператора invoke?

Elisey Budnitsky
А можете привести пример, где лучше использовать э...

Ну если у вас есть API, ожидающее объект типа () -> Unit, то простое переопределение invoke не даст вам возможность передать объект вашего класса в качестве аргумента типа () -> Unit

Andrey Antipov
Ну если у вас есть API, ожидающее объект типа () -...

То есть только для различных видов коллбэков?

Elisey Budnitsky
То есть только для различных видов коллбэков?

Ну для использования в качестве аргументов ФВП. Это несколько более общее, чем коллбэки. Например, мне как-то сложно концепцию коллбэков прицепить к тем же композициям функций: inline fun <T, R1, R2> ((T) -> R1).andThen(crossinline after: (R1) -> R2): (T) -> R2 = { after(this(it)) }

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
50
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
буквально один оставшийся вопрос при выполнении строчки mov eax, 5 операнд "5" будет присутствовать где-либо в памяти (любой), кроме как в памяти блока .code? подвопрос: как...
12
Всем ку. Подскажите, если задекларировал массив так: int arr[10] = {1, 2, 3, 4}, то в arr[4] будет мусор или нуль?
Sasha K
14
я не понимаю mov [r11+8],rcx и прочие. мы записываем значение из rcx, куда?
Bor
15
у меня такой вопрос про память в x86 возник, может кто пояснить?.. у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше)...
Toideng
5
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
А какие расширения активно используются в промышленности? Именно идейные, по типу гадт, а не всякие оверлоадедстрингс
Степан
11
у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше): - "п1" --- виртуальный адрес, то есть тот, который ресолвится в "п...
Toideng
3
Guys Who’s kurdish on this group?
Hiwa Amiri
11
Карта сайта