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

Как на ассемблере написать функцию с замыканием?

17 ответов

25 просмотров

Пардон, а замыкание это что?

На языке ассемблера отсутствует понятие функции. Соответственно, функцию с замыканием не сделать.

__Azim__
Что значит функция с замыканием?

Это такая функция, которая возвращает ссылку на объект, созданный внутри данной функции, который продолжает существовать после того, как функция закончит свою работу. Пример на питоне: def factory(): child = "я продолжаю жить" return child t = factory() factory() отработала своё, сборщик мусора её должен уничтожить. Но внутри себя она создала child, который продолжает жить снаружи функции.

楽園松本
Это такая функция, которая возвращает ссылку на об...

под это определение подходит любой конструктор

randomize usr
под это определение подходит любой конструктор

Фабричная функция, функция-фабрика, factory function -- всё это функция с замыканием

楽園松本
Это такая функция, которая возвращает ссылку на об...

Ещё один классический пример def factory(x): def magnify(n): return n**x return magnify square_func = factory(2) cube_func = factory(3) for n in [2, 3, 5]: print(square_func(n), cube_func(n) вывод: 4 8 9 27 25 125 Здесь каждый раз factory() возвращает ссылку на новый вид функции magnify(). "Новый вид" magnify() возникает потому, что внутри magnify есть ссылка на внешнюю для magnify() переменную x, которая при разном вызове функции factory() является разной.

__Azim__
Thanks

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

楽園松本
Ещё один классический пример def factory(x): de...

Интересно, а как в функцию передается n?

Eto_ne_ya
Интересно, а как в функцию передается n?

Там передаётся как аргумент при вызове sqaure_func()

__Azim__
Что значит функция с замыканием?

мне вот эта картинка из стать выше понравилась

楽園松本
Там передаётся как аргумент при вызове sqaure_func...

И при этом в описании функции нет явного указания на то, что переменная передаётся именно как аргумент?

Eto_ne_ya
И при этом в описании функции нет явного указания ...

Вернее, n передаётся при вызове factory(). Factory(), в свою очередь, возвращает ссылку на объект типа функция. Но эта возвращаемая функция magnify связана с переданным n. В том и суть замыкания.

楽園松本
Вернее, n передаётся при вызове factory(). Factory...

Замечательно) А если будет 2 аргумента, как функция поймёт, где какой?

楽園松本
Какая из функций? Factory или magnify?

Так ведь n используется только в magnify)

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта