2017.5.8

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


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() 挂起时,才能停止(也就是说,只能自己挂起自己),而协同程序之间是互相协作的运行,这一点非常重要,不像线程之间是相互独立的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.1程序块:Lua执行的每段代码,例如一个源代码文件或者交互模式中输入的一行代码,都称为一个程序块 1.2注释:...
    c_xiaoqiang阅读 2,692评论 0 9
  • 又到周一了,今天很压抑,武夕回来了,好像有点黑了,我知道你这几天在倒腾啥了,很牛比,你完成了,可以在自己电脑打印东...
    那一年曾被叫过欧阳师傅阅读 106评论 0 0
  • 中午在西区食堂,买好饭刷饭卡付账时显示余额不足,赶紧去门口的充值机充值,排队的姑娘们纷纷离开,原来充值机故障,返回...
    蒋立行阅读 206评论 0 0
  • 关于家庭,在小胖心里是一个永远不愿意提起的话题。也不知为何,他会把这些都告诉别人的女神,也许是信任,也许是打...
    烧水太郎阅读 331评论 0 0
  • 当当当,历时一年多,ApplePay终于能在2016年2月18日凌晨5点正式入华,为千千万万的Apple用户带来便...
    小灯说事阅读 500评论 0 0

友情链接更多精彩内容