lua 基础

table 中的可以元素(类似数组)或者键值对,实际上lua内部采用哈希表和数组分别保存键值对、普通值,所有不推荐混合使用这两种赋值方式。

table中不要使用nil元素

table判断是否为空

function isTableEmpty(t)
    return t == nil or next(t) == nil
end

注意: next 指令是不能被 LuaJIT 的 JIT 编译优化,并且 LuaJIT 貌似没有明确计划支持这
个指令优化,在不是必须的情况下,尽量少用。


cjson.encode(nil) = null

cjson.decode(nil)= nil


4.函数的参数

按值传递

Lua函数的参数大部分是按值传递的。值传递就是调用函数时,实参把它的值通过赋值运算传递给形参,然后形参的改变和实参就没有关系了。在这个过程中,实参是通过它在参数表中的位置与形参匹配起来的。

在调用函数的时候,若形参个数和实参个数不同时,Lua会自动调整实参个数。调整规则:若实参个数大于形参个数,从左向右,多余的实参被忽略;若实参个数小于形参个数,从左向右,没有被实参初始化的形参会被初始化为nil。


变长参数

上面函数的参数都是固定的,其实Lua还支持变长参数。若形参为 ... ,表示该函数可以接收不同长度的参数。访问参数的时候也要使用 ...


具名参数

Lua 还支持通过名称来指定实参,这时候要把所有的实参组织到一个table中,并将这个table作为唯一的实参传给函数。

按址传递

    当函数参数是table类型时,传递进来的是table在内存中的地址,这时在函数内部对table所做的修改,不需要使用return返回,就是有效的。

    在常用基本类型中,除了table是按址传递类型外,其它的都是按值传递参数。

    用全局变量来代替函数参数的不好编程习惯应该被抵制,良好的编程习惯应该是减少全局变量的使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章