Lua的基本语法

介绍

Lua的设计目标是让它易于嵌入到其他应用程序中,并提供简单灵活的语法和强大的扩展性。它的语法类似于C语言,并被设计为高度可定制的,可以使用C或C++语言编写扩展模块。Lua还提供了面向对象编程,闭包和函数式编程的支持,是一种非常灵活的语言。Lua被广泛应用于游戏开发、嵌入式系统、网络编程、科学计算和其他领域。

目录

介绍

运算符

 字符串

表结构table

   定义表

条件判断

循环语句

for循环

数值for循环

泛型for循环

  while循环

function函数

引入模块

元表

元方法

__index 

 __newindex

 __add             

__call

__tostring

 lua协同程序(coroutine)

 Lua文件I/O


运算符

  算数运算符
    +,-,*,/,%,^求幂
 
 关系运算符
    ==,~=(不等于), > ,< ,>=,<= 

  逻辑运算符
    a  and   b                    --a,b都为true结果为true,否则为false
    a  or    b                     --a,b中只要有一个为true,结果就是ture
    not   a                         --a为ture(false),结果为false(ture),结果取反
    ..                                 --连接字符串
    #                                 --取字符串和表数据的长度,表中只能取索引为数字的长度


 字符串

转义字符
    \n  换行
    \r   回车
    \\   一个斜杠
    \"   代表  ”
    \'    代表  '

 字符串的操作

string.upper()	                                        --字符串转换大写字母
string.lower()	                                            --字符串转换小写字母
string.reverse()	                                        --字符反转 
string.format()	                                            --字符串格式化
string.gsub (字符串名,”选择内容”,“要替换的内容”,替换个数)	--替换字符
string.find(字符串名,“要查找的字符”)	                        --返回要查找的字符索引
string.len()	                                            --字符串长度
string.rep(要拷贝的字符,拷贝次数)	                        --拷贝字符串

表结构table

   定义表

table={}
table.key1="赋值字符串"
table[2]=1 赋值数字
table["key3"]="赋值"

    赋值号右边加双引号代表赋值内的内存,即字符(string)
    不加双引号代表赋值    只能赋值number类型(整数、浮点数)
    左边可定义索引名称,也可指定数组下标
    同一键值,参数可覆盖
    删除一个数组,可以给相对索引赋值nil即可
    删除整个表,直接给表名赋值nil,释放内存


一个表赋值给另一个表,指向的是同一个地址

table.concat(表名,”间隔符“,开始索引,结束索引)	-拼接表中字符串
table.insert(表名,索引值,插入字符)			    -插入字符(默认插入最后)
table.remove(表名,索引)				            -移除表中字符
table.sort(表名)					            -对表中的值排序
 table.concat(table ,sep ,start ,end)
	concat是连锁,连接的缩写,table.concat()函数列出参数中指定table的数组部分
	从start位置到end位置是所有元素,元素间可指定分隔符(sep)隔开

 table.insert(table,[pos],value)
	选择一个table数组表内指定[pos]位置插入值为value的一个元素。
	pos参数需指定,默认为数组尾部
table.remove(table,pos)
	删除pos指定位置的数组元素,其后的元素会前移,
	pos默认值为table长度(就是默认删除最后一个元素)
table.maxn(table)
	取指定table中所有正数的位数,如果不存在正数的元素返回0.
table.sort(table)
	对table中的元素进行排序,默认是升序 

条件判断

if语句

if(布尔条件)then
	body
end

循环语句

for循环

数值for循环

for var=exp1,exp2,exp3 do  
<执行体>  
end  

var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 "执行体"。
exp3 是可选的,如果不指定,默认为1。

泛型for循环

for 索引,元素值  in  ipairs(取数组值) (table)
body
end

for 索引,元素值  in pairs(取字典值) (table)
body
end

ipairs遇到nil值停止 
pairs遇到nil值跳过,继续运行(遍历所有值)
通常用来遍历表


  while循环

while (条件) do		--条件满足时执行
	body
end
repeat
	bady
until(条件 )	---条件满足时不在执行

function函数

函数可以作为数据赋值,可以作为参数传递
函数可以返回多个值

[local]  function         --定义局部函数	
function name(,,,……)    --可同时定义多个参数

引入模块

require"模块文件名"
require("模块文件名")

元表

setmetatable (只能用于table ),getmetatable (用于任何对象)

setmetatable (table, metatable) ,对指定table设置metatable
	————[如果元表(metatable)中存在_ metatable键值 ,setmetatable会失败]
	
 tmeta = getmetatable (tab) , 返回对象的元表(metatable)
	————[如果元表(metatable)中存在_ metatable键值, 当返回_ _metatable的值]

元方法

__index 

添加函数时参数(table,key),在metatable里使用,普通表访问索引不存在时,去访问__index指向的数据

 __newindex

  • 添加函数时参数(table,key,value),当我们给表添加新的键值对的时候,会起作用当__newindex后面跟的是一个表,数据会添加到这个表中;如果跟的是函数则调用函数
  • rawset(table,key,value),在__newindex里添加键值对时使用

 __add             

加法运算
(还有一系列加减乘除等等一系列元方法)


__call

 添加函数时,参数( table,value……)  可以使表当作函数使用,调用__call指向的内容

__tostring

添加函数时的参数(table)    自定义表的输出内容


 lua协同程序(coroutine)

 coroutine.create             定义协同函数,--返回值第一个参数是运行成功返回true否则false   

coroutine.resume            启动coroutine,--返回值第一个参数是运行成功返回true否则false
coroutine.yield                挂起coroutine,--将coroutine设置为挂起状态,即暂停

 Lua文件I/O

简单模式(简单模式使用标准的 I/O 或使用一个当前输入文件和一个当前输出文件。)

		file=io.open(”文件名“,”参数“)	--导入文件
				参数:
				r 只读方式打开,文件必须存在
				w 只写,文件存在长度清0,不存在建立
				a  附加方式打开只写,文件存在,内容附加文件尾部;不存在建立文件
io.input(file)                        --写入接收文件的变量

file = io.open("test.lua", "r")        -- 以只读方式打开文件


file = io.open("test.lua", "a")         -- 以附加的方式打开只写文件

io.output(file)                         -- 设置默认输出文件为 test.lua

io.write("--  test.lua 文件末尾注释")    -- 在文件最后一行添加 Lua 注释

io.close(file)                          -- 关闭打开的文件

io.read()        
    参数:
       *n 读取一行数字
       *l  读取一行字符(默认)
       *a读取所有字符
       number 自定义读取字符长度

完全模式(通常我们需要在同一时间处理多个文件),我们需要使用 file:function_name 来代替 io.function_name 方法。


file = io.open("test.lua", "r") -- 以只读方式打开文件

print(file:read())              --读取文件,参数与简单模式相同

file:close()                    -- 关闭打开的文件

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值