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

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

17 ответов

23 просмотра

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

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

__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)

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
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
Карта сайта