lua 函数 默认值_简明lua教程[转]

本文详细介绍了Lua的基本语法,包括全局变量、退出方法、执行chunk、注释、条件判断、连接运算符、逻辑运算符、表成员访问、迭代器、for循环、错误处理、协同程序、元表操作、全局变量、C API应用以及Lua的函数默认值实现。同时探讨了Lua的面向对象、用户数据类型用途和常用函数,如type、字符串处理、io操作、table和string函数、模式匹配等。文章还分享了一些实用技巧和API参考。
摘要由CSDN通过智能技术生成

---------------list start------------------

【LUA基本语法】

【LUA常用函数】

【技巧集】

【API reference】

【参考资料】

---------------list end--------------------

【LUA基本语法】

1.1 全局变量不需要声明

b = nil

删除一个全局变量

print(b) --> nil

1.2 退出LUA的方法

Ctrl-D(linux) Ctrl-Z(DOS/Windows) 调用OS库的函数 os.exit()

1.3 执行lua的chunk方法

执行一系列:lua -l -l

在交互模式下调用dofile函数 >dofile("")

1.4 注释

注意:Lua是大小写敏感的.

注释:单行注释:--

多行注释:--[[ --]]

1.5条件判断

在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。

对于Table,Function和Userdata类型的数据,只有 == 和 ~=可以用。相等表示两个变量

引用的是同一个数据。比如:

a={1,2}

b=a

print(a==b, a~=b) -- true, false

a={1,2}

b={1,2}

print(a==b, a~=b) -- false, true

1.6 连接运算符

print(10 .. 12)   --> 1012

1.7 逻辑运算符

逻辑运算符认为false和nil是假(false),其他为真,0也是true.

and的优先级比or高。

a and b -- 如果a为false,则返回a,否则返回b

a or b -- 如果a为true,则返回a,否则返回b

如果x为false或者nil则给x赋初始值v

x = x or v

C语言中的三元运算符

a ? b : c

(a and b) or c

1.8 引用表中成员

w = {x=0, y=0, label="console"}

print(w.x)       --> 0

print(w["x"])    --> 0

1.9 迭代器

function list_iter (t)

local i = 0

local n = table.getn(t)

return function ()

i = i + 1

if i <= n then return t[i] end

end

end

t = {10, 20, 30}

for element in list_iter(t) do

print(element)

end

1.10 for循环

- 第一种:数值循环

for var=exp1,exp2,exp3 do

loop-part

end

for将用exp3作为step从exp1(初始值)到exp2(终止值),执行loop-part。

其中exp3可以省略,默认step=1

- 第二种:范性for

for in do

end

是一个或多个以逗号分割的变量名列表,是一个或多

个以逗号分割的表达式列表,通常情况下exp-list只有一个值:迭代工厂的调用。

变量列表中第一个变量为控制变量,其值为nil时循环结束。

表达式应该返回范性for需要的三个值:迭代函数,状态常量和控制变量;

表达式返回的结果个数不足三个会自动用nil补足,多出部分会被忽略;

将状态常量和控制变量作为参数调用迭代函数;

迭代函数返回的值赋给变量列表。

1.11 错误处理

error函数抛出异常

assert调用抛出异常

pcall函数调用

1.12 协同程序

coroutine.create()

coroutine.resume(,[传给协同程序的参数列表])

resume函数的返回值除了true或false以外,还有yield的所有参数

1.13 __le和__lt __eq

一般实现__le后,还要实现__lt 和__eq

Set.mt.__lt = function (a,b)

return a <= b and not (b <= a)

end

Set.mt.__eq = function (a,b)

return a <= b and b <= a

end

1.14 有默认值的表实现(所有表共享同一个metatable)

local key = {} -- unique key

local mt = {__index = function(t) return t[key] end}

function setDefault (t, d)

t[key] = d

setmetatable(t, mt)

end

-->上面的写法,每一个表占用一个空间存储默认值d

tab = {x=10, y=20}

print(tab.x, tab.z) --> 10 nil

setDefault(tab, 0)

print(tab.x, tab.z) --> 10 0

1.15 只读的表实现

每一个只读代理有一个单独的新的metatable,使用__index指向原始表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值