2017.5.23

  1. 搭建环境,准备代码阅读和分析工具,所谓“工欲善其事必先利其器”也
    准备 understand, enterprise architect,sourceInsight这三个基本工具。

-- sourceInsight 使代码阅读和编辑的利器,能够很方便的在函数申明,调用之间进行跳转,很方便对代码进行细读时使用
-- enterprise architect,简称EA,这款工具一般主要用于UML建模等,但这仅仅只是其中一个很小的功能,它能够根据源代码进行反向工程,反向出UML model,能够根据DB model 生成相应的DDL,也能够根据DDL反过来生成相应的DB model,合理的使用EA,能够大大简化工作量。一般我阅读代码的时候,主要使用的就是EA的反向工程的能力(reverse engineering)
-- understand 这款工具,也是最近才得知的,这个工具是一款代码分析工具,能够对源代码进行分析,同时生成各种模型图,方便对代码进行阅读和理解。


lua学习回顾与总结:

  1. lua 函数是一种左值,也就是说,function 类型的数,比如 print 函数,其实是print 变量指向一个函数,能够像 字符串或者整型数一样使用,能够作为函数参数,能够作为函数返回值使用。一般定义函数如下所示:

    local function sum()
    statement
    end


    等价于
    local sum
    sum = function ()
    statement
    end

  2. 将到 lua 中的函数,就不得不提到闭包的概念 clousure。闭包指的是值,而不是函数原型。所谓的闭包,就是一个函数及其该函数所需访问的所有“外部的局部变量”。外部的局部变量,也称为为"UpValue",这是有历史意义的。在lua 总,所有的函数都是闭包。
    比如

    function newCounter ()
    local i = 0
    return function ()
    i = i + 1
    return i
    end
    end

    上面的函数中,newCounter 就是一个闭包,在该函数内部,返回了一个匿名函数,该匿名函数能够直接访问newCounter 内部的局部变量 i,这就是外部的局部变量

  3. 迭代器
    for 语句使用迭代器的时候,会保存三个值:迭代器函数、恒定状态和控制变量。
    比如
    for var1, var2,...varn in do
    block
    end
    首先,迭代器函数 会返回三个值个for,迭代器函数_f, 恒定状态_s,控制变量_var。然后通过恒定状态和控制变量对迭代器函数求值,返回值中如果第一个值不是nil,那么将执行循环体中的语句,否则,退出循环。可以写成如下代码块:

    _f,_s,_var =
    while true do
    var1,var2,...,varn = _f(_s, _var)
    _var = var1
    if _var == nil then
    break
    end
    block
    end

    还有无状态的迭代器,lua提供的迭代器:
    数组 -- ipairs()
    table -- pairs()
    string中的单词 -- string.gmatch()
    行 -- io.lines()

dofile()
loadfile()
loadstring
require
错误处理
assert
pcall
xpcall
debug.debug()
debug.traceback()

  1. 协同程序
    协同程序与多线程类似,但是一个程序能够同时运行多个线程,线程之间彼此相互独立,一个程序同时只能运行一个协程,协程之间是相互合作运行的。一个协程只有在其显示的要求挂起时,才会暂停执行。
    coroutine.create() -- 创建协同程序
    coroutine.yield() -- 挂起
    coroutine.resume() -- 唤醒
    resume - yield 之间可以相互传递参数,类似于生产者与消费者之间的关系

你可能感兴趣的:(2017.5.23)