linux打开lua后中文有乱码,总结Lua使用中遇到的小问题

Lua可以被C/C++ 代码调用,反过来也可以调用C/C++的函数,这使得Lua被广泛应用。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。Lua在目前解释型脚本引擎中,速度是最快的,这决定了Lua嵌入式脚本的最佳选择。文章列举lua使用中遇到的小问题,做个汇总。

if判断

lua把 nil 和false 视为“假”,其他都为“真”

local变量声明

local var1=1,var2

以上 ,var1和var2的作用域不同,var1是所在作用域的变量,var2可能是全局变量。实际上述命令解释后为 var1 取 "1,var2" 组成的值第一个值,类似 local var1 = ...

正确的写法是:

local  var1, var2=1

table是否为空

if a == {} then

结果是false,这是一个逻辑错误,实际比较table a的内存地址和一个匿名table的是否相同

正确的写法是:

if next(a) == nil then

多个变量赋值

name,name = 1,2

那name等于多少呢?

实际上name值为1,可以写个小例子 a,b = 2,3,4打印汇编码就可以看到了。 方法:luac -l test.lua

table的key规则

t[name]与t["name"], t.name

第一种和后两种是不同的,第一种会根据取name的值做key,后两种以 "name"做key。这种情况还有:

t = {[name] = 1}

t = {name = 1}

t = {["name"] = 1}

table引用问题

将一个table复制给另外一个table,修改这个新的table值会影响原来的table,但通过clone可以改变这一行为。

-- 下面的代码,t2 是 t1 的引用,修改 t2 的属性时,t1 的内容也会发生变化

local t1 = {a = 1, b = 2}

local t2 = t1

t2.b = 3    -- t1 = {a = 1, b = 3}

-- clone() 返回 t1 的副本,修改 t2 不会影响 t1

local t1 = {a = 1, b = 2}

local t2 = clone(t1)

t2.b = 3    -- t1 = {a = 1, b = 2}

这里也补充一个深度复制的函数:

function table.deepcopy(object)

local lookup_table = {}

local function _copy(object)

if type(object) ~= "table" then

return object

elseif lookup_table[object] then

return lookup_table[object]

end

local new_table = {}

lookup_table[object] = new_table

for index, value in pairs(object) do

new_table[_copy(index)] = _copy(value)

end

return setmetatable(new_table, getmetatable(object))

end

return _copy(object)

end

函数返回值

> function f123() return 1, 2, 3 end

> function f456() return 4, 5, 6 end

> print(f123(), f456())

1      4      5      6

> print(f456(), f123())

4      1      2      3

> print(f456())

4      5      6

> print(f456(),1)

4      1

如果函数不是处于列的最后一个,只返回一个值

Lua 的详细介绍:请点这里

Lua 的下载地址:请点这里

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值