魏长东

weichangdong

lua七宗罪

因为擅长写php,而且lua刚学,所以有些估计是我水平不够才会这么认为的。

第一宗 不能很好的计算table长度。比如这样的

local all_sids = {

        ['1'] = 'Facebook',

        ['2'] = 'API',

        ['3'] = 'Google',

        ['16'] = 'MV',

['27'] = 'Mopub',

}

第二宗 函数默认值不能放在参数上,需要写到函数里面。

这是错的

function wcd(n=2)

end

需要这样

function wcd(n)

n = n or 2

end

第三宗 table数字变量,必须加方括号单引号,不然没法访问。

这样是错的

local all_sids = {

        1 = 'Facebook',

        2 = 'API',

        3 = 'Google',

        16 = 'MV',

27 = 'Mopub',

}

正确的见第一宗例子

第四宗 luasql循环的数据直接insert到table,结果不是预期的

local select_sql = "select "..fields.." from wcd where ".. where .. group

print(select_sql)

cur = conn:execute(select_sql)  

row = cur:fetch({},"a")

local re = {}

local total_data = {}

local  fuck ={}

while row do

-- 这是正确的

fuck = {s_id=row['s_id'],show =row['show'],income=row['income'],click=row['click']}

-- 这是错误的

table.insert(re,row)

end

第五宗 不方便判断是否一个值存在于一个数组

第六宗 【或许不算什么罪过,但是使用php习惯了,觉得这样停变态的】定义变量,不要全局变量和局部变量混着来,否则你不根本不知道问题出在哪里

要是觉得不变态,可以帮我理解下下面的代码么,根本不懂什么upvalue啊

local data = 100;

 

local function fun1()

   print(data);

   data = data+50;

 

end

 

data = 200;

 

local data = 300; -- 重新定义一个局部变量

 

local function fun2()

   print(data);

   data = data+50;

end

 

data = 400;

--调用

fun1(); -- 200

fun2(); -- 400

fun1(); -- 250

第七宗 table pairs输出,不按照预定顺序,是不是感觉很恶心啊。

local all_mid_8 = {

['147'] = '147加速',

['148'] = '148页',

['149'] = '149成页',

['118'] = '118屏保',

['153'] = '153功能卡片',

['154'] = '154一键',

}

for mid,mid_name in pairs(all_mid_8) do

print(mid..'==='..mid_name)

end