1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
<span class="hljs-comment">--[[
Simple signal/slot implementation
]]</span>
<span class="hljs-keyword">local</span> signal_mt = {
<span class="hljs-built_in">__index</span> = {
register = <span class="hljs-built_in">table</span>.<span class="hljs-built_in">insert</span>
}
}
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">signal_mt.__index:emit</span><span class="hljs-params">(... <span class="hljs-comment">--[[ Comment in params ]]</span>)</span></span>
<span class="hljs-keyword">for</span> _, slot <span class="hljs-keyword">in</span> <span class="hljs-built_in">ipairs</span>(<span class="hljs-built_in">self</span>) <span class="hljs-keyword">do</span>
slot(<span class="hljs-built_in">self</span>, ...)
<span class="hljs-keyword">end</span>
<span class="hljs-keyword">end</span>
<span class="hljs-keyword">local</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">create_signal</span><span class="hljs-params">()</span></span>
<span class="hljs-keyword">return</span> <span class="hljs-built_in">setmetatable</span>({}, signal_mt)
<span class="hljs-keyword">end</span>
<span class="hljs-comment">-- Signal test</span>
<span class="hljs-keyword">local</span> signal = create_signal()
signal:register(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(signal, ...)</span></span>
<span class="hljs-built_in">print</span>(...)
<span class="hljs-keyword">end</span>)
signal:emit(<span class="hljs-string">'Answer to Life, the Universe, and Everything:'</span>, <span class="hljs-number">42</span>)
<span class="hljs-comment">--[==[ [=[ [[
Nested ]]
multi-line ]=]
comment ]==]</span>
<span class="hljs-string">[==[ Nested
[=[ multi-line
[[ string
]] ]=] ]==]</span>
|