A few small trap about lua
This project is maintained by wangfakang
lua的一些小陷阱
北京的四九来了,冻死了......
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
function test_a()
print("a")
end
test_a()
function test_a()
print("b")
end
test_a()
结果:
a
b
竟然不报错,同名的函数竟然通过了.最后才知道 lua是把这些函数名存在一个表中,当调用的时候只是从栈顶pop而已.
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中就是这么简单-----实现一个多函数参数.
后面遇到了,在补充.
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流