lua实现简单

Posted ly570

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua实现简单相关的知识,希望对你有一定的参考价值。

MessageManager.lua

local messageManager = mEventTable = ,mEventUserData =

--注册事件
function messageManager.Add(EventName,Func,UserData)
assert( Func )
messageManager.mEventTable[ EventName ] = messageManager.mEventTable[ EventName ] or
local Event = messageManager.mEventTable[ EventName]
table.insert(Event,Func)
messageManager.mEventUserData[ EventName ] = messageManager.mEventUserData[ EventName ] or
local userDataTable = messageManager.mEventUserData[ EventName ]
userDataTable[ Func ] = UserData or true
end

--移除事件
function messageManager.Remove(EventName,Func)
assert( Func )
local Event = messageManager.mEventTable[ EventName ]
if not Event then
return
end
table.remove(Event)

end

--派发消息
function messageManager.Dispatch(EventName)
assert(EventName)
if (messageManager.mEventTable[EventName] == nil) then
return
end
local Event = messageManager.mEventTable[EventName]
for i,Func in ipairs(Event) do
Func(messageManager.mEventUserData[EventName][Func])
end
end

return messageManager
User.lua

--获取事件监听器
local MessageManager = require ‘MessageManager‘

--注册事件“a”
MessageManager.Add("a",function(a) print(a) end,"\"a\" happened!")

--事件“a”发生
MessageManager.Dispatch("a")

print("-------------------")

--移除事件“a”
MessageManager.Remove("a",function(a) print(a) end)

--事件“a”发生
MessageManager.Dispatch("a")
运行User.lua得到的结果:

 

可以看到注册事件“a”之后,当事件“a”发生之后,相对应的回调函数被事件监听器执行了;当移除事件“a之后”,事件“a”再次发生的时候,事件监听器并没有再执行事件监听者注册事件时留下的回调函数。

这次完成的事件监听器只是个简单的demo,还有很多地方没有完善的,比如同一个事件被多个事件监听者注册的情况以及同一个事件被同一个事件监听者注册的情况,还有回调函数的参数为可变长参数的情况。

这篇博客只是我自己在学习lua路上的一点学习记录,希望大家多多指教。
--------------------- 

以上是关于lua实现简单的主要内容,如果未能解决你的问题,请参考以下文章

Lua实现简单的类,继承,多态 实例

lua面向对象是怎么实现的

如何在Lua与C/C++之间实现table数据的交换

Lua 5.2 - utf8降低功能 - 是否有纯粹的lua实现?

Lua中使用table实现的其它5种数据结构

lua功能实现-搜索栏规则设定