Lua--1.基础知识

Lua基础知识

变量

简单的4种变量类型

  1. number
  2. string
  3. boolean
  4. nil

lua中所有的变量申明 都不需要申明变量类型 他会自动的判断类型(类似C# 里面的 var )

lua中的一个变量 可以随便赋值 ------自动识别类型

lua中使用没有声明过的变量 ,默认值是nil

复杂的4种变量类型

  1. function--函数
  2. table--表
  3. userdata--数据结构
  4. thread--协同程序

type函数

作用:得到变量类型,返回值是一个string

lua 复制代码
--lua中使用没有声明过的变量 
--不会报错 默认值 是nil
print(b)


--number 所有的数值都是number
print("**********number************")
a = 1
print(a)
print(type(a))
a = 1.2
print(a)
print(type(a))
print("**********string************")
a = "12312"
print(a)
print(type(a))
--字符串的声明 使用单引号或者双引号包裹
--lua里 没有char
a = '123'
print(a)
print(type(a))
print("**********boolean************")
a = true
print(a)
a = false
print(a)
print(type(a))

字符串操作

lua 复制代码
print("**********字符串************")
str = "双引号字符串"
str2 = '单引号字符串'

长度获取--#

lua 复制代码
--获取字符串的长度
print("**********字符串长度************")
s = "aBcdEfG字符串"
--一个汉字占3个长度
--英文字符 占1个长度
print(#s)

多行打印

  1. 转义字符
  2. \[\]

lua 复制代码
print("**********字符串多行打印************")
--lua中也是支持转义字符的
print("123\n123")
print("12\n")

s = [[我是
哈哈哈
]]
print(s)

字符串拼接

  1. ...
  2. string.format
lua 复制代码
print("**********字符串拼接************")
--字符串拼接 通过..
print( "123" .. "456" )
s1 = 111
s2 = 111
print(s1 .. s2)
print(s1 .. s2)

print(string.format("我是hhh,我今年%d岁了", 18))
--%d :与数字拼接
--%a:与任何字符拼接
--%s:与字符配对
--.......

别的类型转字符串-- tostring()

lua 复制代码
print("**********别的类型转字符串************")
a = true
print(tostring(a))

字符串提供的公共方法

lua 复制代码
print("**********字符串提供的公共方法************")
str = "abCdefgCd"
--小写转大写的方法,不会改变原字符串
print(string.upper(str))
--大写转小写
print(string.lower(str))
--翻转字符串
print(string.reverse(str))
--字符串索引查找
print(string.find(str, "Cde"))
--结果是3--5,lua里都是从1 开始的,有两个返回值
--截取字符串
print(string.sub(str, 3))
print(string.sub(str, 3, 4))
--字符串重复拼接
print(string.rep(str, 2))
--字符串修改,返回修改后的字符串和修改的次数
print(string.gsub(str, "Cd", "**"))

--字符转 ASCII码,指定位置1,就是'L'转为ASCII码
a = string.byte("Lua", 1)
print(a) --76
--ASCII码 转字符
print(string.char(a))
--打印出L

运算符

算术运算符-- + - * / % ^

没有自增自减 ++ --

没有复合运算符 += -= /= *= %=

字符串 可以进行 算数运算符操作 会自动转成number

lua 复制代码
--字符串 可以进行 算数运算符操作 会自动转成number
print("加法运算" .. 1 + 2)
a = 1
b = 2

a = a + b
a = a + 1
print(a + b)
print("123.4" + 1)

print("减法运算" .. 1 - 2)
print("123.4" - 1)

print("乘法运算" .. 1 * 2)
print("123.4" * 2)

print("除法运算" .. 1 / 2)
print("123.4" / 2)

print("取余运算" .. 1 % 2)
print("123.4" % 2)

--^ lua中 该符号 是幂运算
print("幂运算" .. 2 ^ 5)
print("123.4" ^ 2)

条件运算符-- > < >= <= == ~=(不等于 是 ~=)

lua 复制代码
print("**********条件运算符************")
-- > < >= <= == ~=
print(3>1)
print(3<1)
print(3>=1)
print(3<=1)
print(3==1)
--不等于 是 ~=
print(3~=1)

逻辑运算符-- and or not

lua 复制代码
print("**********逻辑运算符************")
--&&  ||  !   "短路"
--and  or  not  lua中 也遵循逻辑运算的 "短路" 规则
print( true and false)
print( true and true)
print( false and true)

print( true or false)
print( false or false)

print( not true)

位运算、三目运算符--lua不支持

条件分支语句

if 条件 then ... end

lua 复制代码
print("**********条件分支语句************")
a = 9
--if 条件 then.....end
--单分支
if a > 5 then
	print("123")
end

--双分支
-- if 条件 then.....else.....end
if a < 5 then
	print("123")
else
	print("321")
end

--多分支
-- if 条件 then.....elseif 条件 then....elseif 条件 then....else.....end
if a < 5 then
	print("123")
--lua中 elseif 一定是连这些 否则报错
elseif a == 6 then
	print("6")
elseif a == 7 then
	print("7")
elseif a == 8 then
	print("8")
elseif a == 9 then
	print("9")
else
	print("other")
end


if a >= 3 and a <= 9 then
	print("3到9之间")
end

--lua中没有switch语法  需要自己实现

不支持switch、三目运算符

循环语句

while -- while 条件 do ... end

lua 复制代码
print("**********while语句************")
num = 0
--while 条件 do ..... end
while num < 5 do
	print(num)
	num = num + 1
end

repeat ... until 条件

lua 复制代码
print("**********do while语句************")
num = 0
--repeat ..... until 条件 (注意:条件是结束条件)
repeat
	print(num)
	num = num + 1
until num > 5 --满足条件跳出 结束条件

for

  1. for 变量名=起始值,结束值 do ... end
  2. for 变量名=起始值,结束值,增值 do ... end
lua 复制代码
print("**********for语句************")

for i =2,5 do --默认递增 i会默认+1
   print(i)
end



for i =1,5,2 do --如果要自定义增量 直接逗号后面写
   print(i)
end

for i =5,1,-1 do --如果要自定义增量 直接逗号后面写
   print(i)
end

函数

lua 复制代码
print("**********函数************")
--function 函数名()
--end

两种申明方法

  1. 在function后面取名字
  2. 不取名字,用一个变量存储
lua 复制代码
print("**********无参数无返回值************")
function F1()
	print("F1函数")
end
F1()
--有点类似 C#中的 委托和事件
F2 = function()
	print("F2函数")
end
F2()

函数传参

  1. 个数多了或者少了,不会报错
  2. 多了弃用
  3. 少了补空
lua 复制代码
print("**********有参数************")
function F3(a)
	print(a)
end
F3(1)
F3("123")
F3(true)
--如果你传入的参数 和函数参数个数不匹配
--不会报错 只会补空nil 或者 丢弃
F3()
F3(1,2,3)

函数返回值

  1. 可以又多个返回值
  2. 外部用多个变量来接取,接少接多不影响,少了丢弃、多了为nil
lua 复制代码
print("**********有返回值************")
function F4(a)
	return a, "123", true
end

--多返回值时 在前面申明多个变量来接取即可
--如果变量不够 不影响 值接取对应位置的返回值
--如果变量多了 不应 直接赋nil
temp, temp2, temp3, temp4 = F4("1")
print(temp)
print(temp2)
print(temp3)
print(temp4)

函数的类型-- function

lua 复制代码
print("**********函数的类型************")
--函数类型 就是 function
F5 = function( )
	print("123")
end
print(type(F5))

不支持函数重载

--函数名相同 参数类型不同 或者参数个数不同

--lua中 函数不支持重载

--默认调用最后一个声明的函数

变长参数-- ...

  1. ...
  2. 先用表接,再使用
lua 复制代码
print("**********变长参数************")
function F7( ... )
	--变长参数使用 用一个表存起来 再用
	arg = {...}
	for i=1,#arg do
		print(arg[i])
	end
end
F7(1,"123",true,4,5,6)

函数嵌套--函数里面声明函数

闭包:改变变量的生命周期

lua 复制代码
print("**********函数嵌套************")
--函数是变量
function F8()
	return function()
		print(123);
	end
end
f9 = F8()
f9()

--闭包 就是在一个函数里返回一个函数,然后返回的函数改变传入参数的生命周期
function F9(x)
	--改变传入参数的生命周期
	return function(y)
		return x + y
	end
end

f10 = F9(10)
print(f10(5))
相关推荐
小大宇16 分钟前
Python 集成 Conda
开发语言·python·conda
还是奇怪32 分钟前
Simon Willison 用 DSPy 优化 Datasette Agent 提示词:提示工程正在变成可测试的软件工程
java·开发语言·软件工程
小大宇1 小时前
python flask框架 SSE流式返回、跨域、报错
开发语言·python·flask
Legendary_0082 小时前
LDR6500 设计指南:Type-C 音频快充二合一配件 PD 取电与插拔时序控制方案
c语言·开发语言·音视频
柒星栈2 小时前
PHP 源码怎么加密防破解?三套方案实战指南
开发语言·php·android studio
勉灬之2 小时前
Next.js + Prisma 跨平台部署踩坑记
开发语言·javascript·ecmascript
这是个栗子3 小时前
前端开发中的常用工具函数(九)
开发语言·javascript·ecmascript·at
蓝创工坊Blue Foundry3 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
会飞的小新3 小时前
C 标准库之 <fenv.h> 详解与深度解析
c语言·开发语言·microsoft
雪的季节4 小时前
dir (obj) 与dir()
开发语言