Lua基础用法

Lua常用语法

Lua基础数据类型如下

nil	只有值nil属于该类,表示一个无效值(判断为false)任何数据被赋值为nil时,相当于删除。
boolean	包含两个值:false和true。
number	表示双精度类型的实浮点数
string	字符串由一对双引号或单引号来表示
function	由 C 或 Lua 编写的函数
userdata	表示任意存储在变量中的C数据结构
thread	表示执行的独立线路,用于执行协同程序
table	"关联数组",数组的索引可以是数字、字符串或表类型。最简单构造表达式是{}。可以理解为map

字符串连接打印需要使用…连接

print(k.."- - - -" ..v)

判断数字都是true

if 0 then
	print("true")
else
	print("false")
end
--不管是什么数字,都是true

循环的使用方法

tab1 = {key1="val1",key2="val2","val3"}
for k,v in pairs(tab1) do
	print(k.."+  +"..v)
end
--使用tab1.key1=nil可以删除key1元素,val3的k会被默认赋值为1,但是不可调用。

数据在跟nil进行比较时,需要给nil加上引号

if (type(x)=='nil') then
	print("true")
else
	print("false")
end
--加引号输出true,不加输出false。type返回的是一个字符串nil。

#计算字符串长度

print(#"Hello World")

--结果为11。无法输出table的长度

Local关键字

带有local关键字的即为局部变量,而不带关键字的就是全局变量

Lua支持多个变量同时赋值,变量之间使用逗号隔开。变量个数和值个数不一致时,多余的使用nil替代。

索引:支持使用.或者[]。

Lua中的循环

while循环:条件为true时,让循环不断执行

while( true )
do
   print("循环将永远执行下去")
end

for循环:重复执行指定语句,重复次数可在 for 语句中控制。

for i = 10, 1, -1 do
  repeat
    if i == 5 then
      print("continue code here")
      break
    end
    print(i, "loop code here")
  until true
end
--这里的break并没有退出循环,内嵌有一个repeat。break只退出了repeat

repeat…until:重复执行循环,直到 指定的条件为真时为止
循环嵌套:可以在循环内嵌套一个或多个循环语句
控制语句break:退出当前循环或语句,并开始脚本执行紧接着的语句。
控制语句goto:将程序的控制点转移到一个标签处。

for i=1, 3 do
    if i <= 2 then
        print(i, "yes continue")
        goto continue
    end
    print(i, " no continue")
    ::continue::
    print([[i'm end]])
end
--goto语句,跳到标签处。可以实现continue--可以在lable中设置多个语句
::lable:: do
  print(i)
  i = i+1
end

Lua流程控制if语句:对表达式进行条件判断。为true继续执行

if(0)
then
    print("0 为 true")
end
--if否面紧跟then

Lua函数

函数定义

local function max(num1,num2)
   if (num1 > num2) then
      result = num1;
   else
      result = num2;
   end
   return result;
end
--local可加可不加(局部和全局),function为函数关键字,max为函数名,num为函数参数
--return可以返回多个值(用逗号隔开),函数也可以作为参数传递

可变参数

function average(...)
   result = 0
   local arg={...}    --> arg 为一个表,局部变量
   for i,v in ipairs(arg) do
      result = result + v
   end
   print("总共传入 " .. select("#",...) .. " 个数")
   return result/select("#",...)
end

print("平均值为",average(10,5,3,4,5,6))
--select('#',) 返回可变参数的长度。可变参数存在nil时仍会计算。
--而使用#{...}计算可变参数的长度时。遍历到nil,计算机会结束。
--select(i, ...)读取可变参数第i个参数

字符串

字符串常用操作

--字符串大写
string.upper(argument):
--字符串小写
string.lower(argument):
--字符串替换
	string.gsub(mainString,findString,replaceString,num)
	string.gsub("aaaa","a","z",3);	-->zzza  3
--字符串查找
	string.find (str, substr, [init, [end]])
	string.find("Hello Lua user", "Lua", 1) 	-->7 9
--字符串反转
	string.reverse(arg)
--返回一个类似print的格式化字符串
string.format("the value is:%d",4)	-->the value is:4
--char 将整型数字转成字符并连接
string.char(97,98,99,100)	--> abcd
--byte 转换字符为整数值(可以指定某个字符,默认第一个字符)。
string.byte("ABCD",4)	-->68(D的ASCLL码为68)
--字符串拷贝
string.rep("abcd",2)	-->abcdabcd
--正则匹配,匹配不到则返回nil,继续匹配
for word in string.gmatch("Hello Lua user", "%a+") do 
	print(word)
end
--正则匹配,只返回第一个匹配结果 string.match(str, pattern, init)
string.match("I have 2 questions for 2 you.", "%d+ %a+")  -->2 questions

字符串匹配模式、格式化等具体需要加强学习,不做展示。

Lua数组

Lua数组默认是以1开始的,当然也可以直接指定为0或者负数

array = {}
for i= -2, 2 do
   array[i] = i *2
end
for i = -2,2 do
   print(array[i])
end
-- 结果为:-4 -2 0 2 4

定义多维数组

array = {}
for i=1,3 do
   array[i] = {}
      for j=1,3 do
         array[i][j] = i*j
      end
end

Lua迭代器

泛型for迭代器

for k, v in ipairs(t) do
    print(k, v)
end

Lua 模块与包

模块的结构就是一个 table 的结构,因此可以像操作调用 table 里的元素那样来操作调用模块里的常量或函数

-- 文件名为 module.lua
-- 定义一个名为 module 的模块
module = {}
-- 定义一个常量
module.constant = "这是一个常量"
-- 定义一个函数
function module.func1()
    io.write("这是一个公有函数!\n")
end
local function func2()
    print("这是一个私有函数!")
end
function module.func3()
    func2()
end
return module

require 函数

require("<模块名>") or require "<模块名>"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值