Event

事件系统,包括定义事件和动作,触发事件等;只支持lua。 全部展开

初始化展开

  • + define()

    启动事件系统,如果已启动,则忽略。
    事件系统启动后,可以直接访问全局数据,但不能直接对全局赋值。
    可以通过lua预定义的_G来赋值,如_G.hello = 'world',如function _G.hello() print 'world' end,推荐使用local作用域。

定义事件和动作展开

  • + _define(group, add)

    参数add非false则添加事件动作组group,false则去除事件动作组group。
    每个事件动作,都属于定义当时添加的所有组,可以在触发事件时指定特定的动作组,其余都过滤掉。

  • + _defname(function)

    返回function对应的事件名称。

  • + _defremove(function)

    删除function对应的事件。

  • + _skip(group, skip)

    参数skip非false,触发事件时跳过动作组group,false则不跳过动作组group。
    每个事件动作,如果属于任何一个跳过的动作组,则触发事件时被过滤掉。

  • + define.name{arg=value, ...}

    定义事件,名称为name。
    参数名为arg,默认值为value,value的类型也是参数的限制类型,对于浮点数,不允许nan也不能超过54bit补码整数的最大范围。
    _开头的参数表示附加参数,包括一些系统选项,触发事件时不检查类型。
    可以定义多个参数,顺序无关。
    可以定义多个事件动作,可以定义每个事件动作的条件。
    define{ arg=value }
    定义事件,名称由随后定义的事件动作来确定。
    参数同上。
    只能定义一个事件动作,不能定义条件。
    通常用于定义事件模板。
    定义的事件就是一个全局函数,注意不要与其他全局数据同名。

  • + when{arg=value, ...} function name(arg..., ...)

    定义事件动作,事件名称为name。
    动作的参数名,非_开头的参数必须是定义的参数名,顺序与无关。
    如果参数名为_args,则调用时的参数值为整个参数table,修改结果将传递给后续动作,_args必须是最后一个参数。
    when{}为事件的参数条件,arg必须是定义的参数名,value是符合条件的参数值,顺序与无关。
    当事件触发时,每个对应的参数值都与value相同,才执行此动作。
    存在大量事件动作时,推荐使用when来过滤简单条件,性能较好。
    如果arg为_order,则表示事件动作的顺序,小order动作优先于大order,目前只支持0和1,默认是1。
    如果arg为_define,则表示事件动作属于value对应的动作组。
    使用.name{}定义的事件,可以定义多个同名的事件动作。
    每个动作都需要指定参数条件,不需要条件可以指定为when{}。
    可以在事件定义之后任何地方定义动作。
    触发事件时,按找order从小到大执行动作,相同order的顺序与动作定义顺序相同。
    使用{}定义的事件,只有一个动作,紧跟在后面。
    不能使用when,{}定义的所有参数,都必须是动作的参数。
    通常用于定义事件模板。
    name = myFunction
    用赋值来指定动作,通常是为多个事件定义相同的动作。

触发事件展开

  • + result... = name{arg=value, ...}

    触发事件。
    参数名arg必须是定义的参数名或以_开头,顺序无关,参数值为value,非_开头的必须符合定义的参数类型。
    触发时没有指定的事件参数,参数值默认为定义的值,注意默认值是引用的,对于table等可变结构,修改会共享。
    每个执行动作的每个返回值会按照执行顺序依次排列,作为整个触发的返回值。
    触发事件时先过滤参数条件,再执行动作,如果动作改变事件参数,不会影响参数条件过滤。
    触发事件时指定参数_define为某个动作组,则只保留此动作组,其他动作全部过滤掉,参见<_define>。
    如果有参数_stop为true,则跳过还未执行的所有动作,如果有参数_stop为整数,则跳过所有 order> = _stop的未执行的动作。
    usec = name{_delay = seconds, arg = value, ...}
    定时触发事件,返回实际定时微秒数,参见<_enqueue>,_from为'lua块名:行号: '。
    seconds为秒数,可含小数,将事件入队<_enqueue>,在没有函数执行且队列项未删除时,按延迟时刻触发事件。

问题反馈(登录才可以发表哦!)