/
spirzen
/
it-code-examples
Обзор
Документация
Войти
/
spirzen
/
it-code-examples
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
examples/lua/lua-515-23-004/main.lua
54 строки
2 KB
Spirzen
Code migration pack
09 июн 2026, 01:41
09 июн 2026, 01:41
cebc284
Код
Авторство
О чём код?
-- ModuleScript: Signal.luau export type Connection = { Disconnect: () -> () } export type Signal<T...> = { Connect: (self: Signal<T...>, callback: (T...) -> ()) -> Connection, Fire: (self: Signal<T...>, T...) -> (), Once: (self: Signal<T...>, callback: (T...) -> ()) -> Connection, } type SignalImpl<T...> = { _callbacks: { (T...) -> () }, _onceCallbacks: { (T...) -> () }, } local Signal = {} Signal.__index = Signal function Signal.new<T...>(): Signal<T...> return setmetatable({ _callbacks = {}, _onceCallbacks = {}, } :: SignalImpl<T...>, Signal) end function Signal:Connect<T...>(callback: (T...) -> ()): Connection table.insert(self._callbacks, callback) return { Disconnect = function() local index = table.find(self._callbacks, callback) if index then table.remove(self._callbacks, index) end end } end function Signal:Once<T...>(callback: (T...) -> ()): Connection table.insert(self._onceCallbacks, callback) return { Disconnect = function() local index = table.find(self._onceCallbacks, callback) if index then table.remove(self._onceCallbacks, index) end end } end function Signal:Fire<T...>(...: T...) for _, cb in self._callbacks do task.spawn(cb, ...) -- асинхронный вызов во избежание блокировки end for _, cb in self._onceCallbacks do task.spawn(cb, ...) end self._onceCallbacks = {} end return Signal