zoukankan      html  css  js  c++  java
  • 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路上的一点学习记录,希望大家多多指教。
    --------------------- 

  • 相关阅读:
    Mybatis总结(mybatis plus待更新)
    maven配置(IDEA)quickstart,IDEA上maven细节配置
    (已解决)C3P0数据库使用配置文件链接,报错:com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
    angular--ng-template&ngTemplateOutlet的用法

    Array.from()和Array.of()用法
    Object.create()
    继承
    Object类型
    剩余参数
  • 原文地址:https://www.cnblogs.com/ly570/p/11277971.html
Copyright © 2011-2022 走看看