Lua4

A few small trap about lua

This project is maintained by wangfakang

lua的一些小陷阱

北京的四九来了,冻死了......

1.lua陷阱之的return语句:

local function rt_test()

    print("func start")

    if 1 then

        print("if entry!")
        return 
        print("return end")
    else
        print("if exit")  

    end 

    print("func end")
end  


rt_test()

结果:

func start    
if entry!   
return end    
func end    

对结果就是这样,xie过c的都知道return后面的语句就不会执行了,可是这里lua就反人类了.
其实在lua中return的用法是我们使用错了,但是为啥用法错了 也不报个错呀!!!!!

追到底,还是我们对lua的编译解析没有彻底的理解,下面你就知道了:

local function rt_test()

    print("func start")

    if 1 then

        print("if entry!")
        return
        119 
        -- print("return end")
    else
        print("if exit")  

    end 

    print("func end")
end  

print(rt_test())

结果:

func start
if entry!
119

看到了吧,最后打印了119,注意上面return 和 119就是在两行.[可以简单的猜测了吧,return 后面的东西 当做返回值了].

如果为了测试,我们可以这样使用:

do return end

2.lua中的函数名陷阱:

function test_a()
    print("a")
end

test_a()                 

function test_a()
    print("b")
end

test_a()  

结果:

a
b

竟然不报错,同名的函数竟然通过了.最后才知道 lua是把这些函数名存在一个表中,当调用的时候只是从栈顶pop而已.

3.再来一个小的技巧:

function printargs(...)
local num_args=select("#", ...)  --获取传递参数饿个数
    print(num_args, "  ", type(num_args))
    for i=1 ,num_args do  
        local arg=select(i, ...) --获取第i个参数
        print (i,arg)
   end 
end
printargs("a","b",3,"d")

结果:

4       number
1   a
2   b
3   3
4   d

没错在lua中就是这么简单-----实现一个多函数参数.

后面遇到了,在补充.

Communite

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

Thx

Author