加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

【lua 关键字、变量类型、操作符、控制语句、函数】

发布时间:2020-12-14 22:04:57 所属栏目:大数据 来源:网络整理
导读:脑子不好,老忘,只能写下来。 关键字 and break do else elseif? end false for function if? in local nil not or? repeat return then true until while 变量和操作符 1、lua支持以下几种变量类型 print(type("string")) ? string print(type(10)) ? ? ?

脑子不好,老忘,只能写下来。

关键字

and break do else elseif?
end false for function if?
in local nil not or?
repeat return then true until while

变量和操作符

1、lua支持以下几种变量类型
print(type("string")) ? string
print(type(10)) ? ? ? ? ?number
print(type(print)) ? ? ? function
print(type(true)) ? ? ? ?boolean
print(type({})) ? ? ? ? ? ?table
print(type(nil)) ? ? ? ? ? nil

PS:
Userdata ? ?嗯,这个类型专门用来和Lua的宿主打交道的。宿主通常是用C和C++来编写的,在这种情况下,Userdata可以是宿主的任意数据类型,常用的有Struct和指针。?
Thread ? ?线程类型,在Lua中没有真正的线程。Lua中可以将一个函数分成几部份运行。如果感兴趣的话,可以去看看Lua的文档。?

2、lua变量是弱类型的,赋值什么类型,就是什么类型

3、nil
在lua里nil表示null,对于定义一个变量未赋值则是nil,对于想要删除一个变量,则将此变量赋值为nil即可

4、布尔值
lua将nil和false视为假,其他都是真,所以数字0空字符串也为真

5、数字
lua的数字没有整形,都是浮点型

6、字符串
不能像C那样直接修改字符串的某一个位置的值,而是需要创建一个新的字符串
例如:
a = "one string"
b = string.gsub(a,"one","another")
print(a) ?-- one string
print(b) ?-- another string
注意:--表示lua的注释,lua用--[[ --]] 来表示注释块
在lua中操作100k或1mb的字符串是很常见的事情,可以使用单引号或者双引号来表示lua字符串
lua还提供了字符串和数字自动转换
print("10"+1) ?-- ?11
print(10+1") ? -- "10+1"
print("-5.3e-10"*"2") ? -- ?-1.06e-09
print("hello"+1) ? -- 错误不能转换

7、..是lua中字符串连接操作符,当你直接在一个数字后面使用它时,必须加上空格,否则会理解为一个点

8、字符串和数字互相转换
tonumber()
tostring()
同样也可以使用 数字加上空字符串来强制转换字符串,例如 10 .. ''
使用 -0 来强制转换数字 ?“10” - 0

9、获取字符串长度,在字符串前加上#号

10、表-table
在lua中使用{}来表示一个表,即对象
a = {}
k = "x"
a[k] = 0; ? ? -- key 为 “x”,值为0
a[20] = "great" ?-- key为20,值为great
print(a["x"]) ? -- 10
k=20
print(a[k]) -- great

具体用法和其他动态语言无异

11、lua中table的赋值是引用赋值

12、循环
a={}
for i=1,1000?
do?
a[i] = i*2
end

13、返回talbe最后一个key值可以用#
例如返回上面的a的最后一个key也就a的长度
print(#a)

14、lua习惯使用1开始数组第一个而不是0,因为#一般返回最后一个的key所以作为数组的长度,table.getn()也返回一样的结果。

15、table.maxn返回一个table的最大正索引

16、注意10,“10”和“+10”这3个表示不同的key,也就是可以再table中保存不同的数据,尽量避免这样存储他们

17、函数可以存储在变量中,可以作为参数传递

18、lua可以调用c语言编写的函数

19、lua中的算术表达式^表示取指数
比如 a = 3
a^3表示3的3次方,为27

20、x - x%0.01表示精确到小数点后两位的结果,其他依次类推

21、使用 ~= 来表示不等于

23、与,或,非表示and,or,not

22、x = x or v 等价于
if not x?
then?
x = v
end

23、类似于C语言的三元运算符:
and 和 or的运算结果不是true和false,而是和它的两个操作数相关。?
a and b:如果a为false,则返回a;否则返回b?

a or b:如果 a 为true,则返回a;否则返回b?

c语言:max = a>b ? a : b
lua: max = (x>y) and x or y

最有用的语句是: x = x or v,它相当于:if not x then x = v end。

24、操作符not永远只返回true或者false,not nil 返回true

25、优先级:
^
not,#,-(一元)
*,/,%
+,-
..
<,>,<=,>=,~=,==
and
or

26、talbe构造式:
days={"one","two","three"}
则表示
days[1] = "one"
days[2] = "two"
days[3] = "three"

27、table构造式2:
a = {x=1,y=2}
等价于
a={}
a.x = 1
a.y = 2

28、table写出链表代码:
list=nil
for line in io.lines()
do
list = {next = list,value = line}
end
然后我们可以这样读取每行的内容
local l = list
while l do
print(l.value)
l=l.next
end

29、还可以混合存储key和数组例如下面,利用分号隔开
a={a=1;2,3}
print(a.a) ? ?--1
print(a[1]) ? --2


语句函数

1、lua允许多重赋值

a,b = 10,2*x

2、交换x和y的值
x,y = y,x

3、如果多重赋值等号左边的变量名多余右边的值,则右边的少于左边的值会以nil代替,反之右边多余的值会被去掉
例如:
a,b,c = 0;
print(a,c) ?-- 0,nil,nil
a,c = 0,0
print(a,0

4、一般多重赋值用来接收函数的2个返回值,比如:
a,b = f()
则a和b分别被赋值了函数f的返回值

5、全局变量和局部变量
j = 10 -- 全局变量
local i = 1 -- 局部变量
局部变量仅作用于声明它的那个块,一个块是一个程序体,例如下面,从while到end是一个程序块
x=10
local i =1
while i <= x
do
local x = i*2
print(x)
i = i + 1
end

6、显示的声明一个程序块
do
?local a = 1
?local b = 2
end

7、一个局部变量和局部变量同名的例子:
local a,b = 1,10
if a<b then
print(a) ?-- 1
local a ? ?
print(a) ? --nil
end
print(a,b) ? -- 1 ?10

8、在lua中有一种书写习惯
local foo = foo
利用全局变量赋值给局部变量可以暂存全局变量而且会加速程序

9、if语句,lua不支持switch语句
if op == '+' then
r=a+b
elseif op == '-' then
r=a-b
else
r=a*b
end

10、while语句
如果条件为假则循环结束,否则一直执行下去
local i = 1
while a[i] do
print(a[i])
i = i + 1
end

11、repeat until至少执行循环一次
repeat
line = io.read()
until line ~= ""

12、for循环
for var=exp1,exp2,exp3
<执行体>
end
var从exp1变化到exp2,每次步长为exp3,exp3是可选的,默认为1
注意i是局部变量,所以在循环体外去读取循环变量会出现错误
例如
for i=1,10 do
print(i)
end
max = i ?--错误!

13、for迭代器
a={x=1,y=2;3,4,5}
for i,v in ipairs(a) do
print(i,v)
end
这里将只叠代a表格数组部分,结果为
1 3
2 4
3 5

14、for迭代器2
a={x=1,5}
for i,v in pairs(a) do
print(i,v)
end
这里将叠代所有atable的key和value,结果为
1 3
2 4
3 5
y 2
x 1

15、return和break
break用于跳出循环
return用于跳出函数

16、一个简单的函数例子
function add(a)
local sum=0
for i,v in ipairs(a) do
sum = sum + v
end
return sum
end

17、函数多重返回值
return a,b
这样就可以返回多个值

18、可以讲函数放入一个圆括号中,迫使它只返回一个值

19、unpack
x = {1,2,3,4}
print(unpack(x))
a,c,d = unpack(x)
print(a,d)
结果为:
1 2 3 4
1 2 3 4

20、变长参数
function add(...)
local s=0
local a,b = ... ?-- 获得可变参数的前2个
print(a,b)
for i,v in ipairs({...}) do
s = s + v
end
return s
end

print(add(3,10,25,12))

21、select选择器
select('#',...) 返回可变参数的长度总数
select(i,...) ?返回可变参数的第i个参数

22、当参数为一个table时,函数调用的圆括号是可有可无的
rename{old="temp.lua",new="temp1.lua"}

23、异常try catch使用 pcall
local status,err = pcall(function() error({code=121}) end)

24、throw 异常使用error函数
function foo(str)
? ? if type(str) ~= "string" then
? ? ? ? error("string expected")
? ? end
...
end

25、print(debug.traceback())
独立的Lua解释器用来构建错误信息的函数就是debug.traceback。你可以在任何时候调用debug.traceback获取当前运行状况的跟踪信息

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读