2017.5.8

作者: 铁拳宝宝爱芝麻 | 来源:发表于2017-05-08 21:33 被阅读0次

    公司的流程真是很长,弄了一上午流程审批,还没有通过,只能重头开始再来一遍流程审批。过期的制度就是这样,公司规模大的话,流程制度是必要的。有人说,中国的国企或者政府,制度是一流的,但是执行力却要大打折扣。这也是过期亟需改革的一个大的方面吧。


    lua学习,看了一下迭代器和错误处理。
    迭代器,for的泛型语义
    for语句中,使用迭代器时,首先会有三种状态,分别是迭代器函数,恒定值和控制变量,先初始化这三个状态,然后通过恒定值和控制变量的初始值调用迭代器函数,如果第一个返回值不是 nil,那么将执行for的循环体,比如
    <code>
    for var1,var2,...varn in <expr>
    do
    statment
    end
    </code>
    可以用下面的语句描述:
    <code>
    local _f, _s, _var = <expr> -- 分别是迭代器函数,恒定值和控制变量
    while true do
    local _var1, _var2, ... = _f(_s, _var)
    _var = _var1
    if _var == nil then
    break;
    end
    statment
    end
    </code>


    错误处理函数
    assert(v, [, message])
    返回出错信息如果 v 是 false或者 nil,message 是出错信息;否则,返回所有参数,如果 v 是一个函数调用,就是返回函数的所有返回结果

    error(message, [, level])
    return message as error message,level 表示的级别,意思就是如果是调用者的错误,比如调用者参数出现明显错误,那么将 level 设置为2,表示不是函数内部出现的问题,是调用者出现的问题

    pcall(f, [, arg1, ...])
    call function g with given arguments. An error inside f is not propagated, instead, pcall catches the error and returns a status code
    status code 为真,表示没有错误,返回status code + 函数f的所有返回值
    status code 为假,说明f 执行出错,返回status code + 错误信息


    协同程序 coroutine
    lua 中的协同程序的函数都放在一个 coroutine 的表中,协同程序有四种状态
    挂起 suspend, coroutine.yield()
    运行 running
    死亡 dead,运行结束
    正常 normal,当A唤醒B时,B为 running 状态,而A此时就是normal状态

    coroutine.yield() 协同程序进入挂起装填
    coroutine.resume 协同程序唤醒挂起的协同程序或者第一次运行

    协同程序不同于线程,具有多个线程的程序同时能运行多个线程,但是具有多个协同程序的程序任意时刻都只能运行一个协同程序,并且正在执行的协同程序只有显示的调用 coroutine.yield() 挂起时,才能停止(也就是说,只能自己挂起自己),而协同程序之间是互相协作的运行,这一点非常重要,不像线程之间是相互独立的。

    相关文章

      网友评论

          本文标题:2017.5.8

          本文链接:https://www.haomeiwen.com/subject/boyvtxtx.html