Lua基本语法
在Lua中具有一个代码块的概念,每个函数或者for循环等都是一个代码块。在Lua中,用 “- - ”来标记该行的注释,使用“- - [ [” 和 “ - - ] ] ”之间括起来的部分进行块注释
Lua 是动态类型语言,变量不要类型定义。
Lua中变量没有类型,值才有类型。
Lua 中有8 个基本类型分别为:
类型 | 说明 | 简介 |
nil | 空类型 | 用于表示空 |
boolean | 布尔类型 | 取值true和false |
number | 数字类型 | 表示实数(包括整数和浮点) |
string | 字符串类型 | 表示字符和字符串 |
table | 表类型 | 关于容器,可作为数组、链表、集合等数据结构的使用 |
function | 函数类型 | 函数本身也是值 |
userdata | 自定义类型 | C的自定义数据,如结构体、指针 |
thread | 线程类型 | 表示协同对象 |
String类型指字符的序列。lua是8位字节,
Lua中判断,除了false和nil为假,其他值都为真。包括数字0和空的字符串都是真。
表达式
一些特别的点:
1. ~=相当于c语言里面的!=,不等于。
2. table、userdata和function是引用比较,只有两个变量指向同一个对象才是相等。
3. 逻辑运算符是"and or not",但是这里的and和or意思跟c语言有不同:
a and b:如果a为false,则返回a,否则返回b;
a or b :如果a为true,则返回a,否则返回b。
and 的优先级比or 高。( 语言中的三元运算符a?b:c。在Lua 中可以这样实现:
a=10
b=20
c=(a>b)and a or b
print(c)
结果为:20
4. “..”两个点,表示字符连接符;如果操作数是number,则转换为字符串:
注意这里1 ..之间有一个空格,不然会报错。
print(1 .. 2) -->12
但是如果是字符串就不需要:
- print("hello".."world") -->helloworld
-- 求类型
print(type("hall")) print(type(10)) print(type(print)) print(type(true)) print(type(nil))print(type(type(x)))
运行结果:string number function boolean nil string
字符 | 意义 | 字符 | 意义 |
---|---|---|---|
\a | 响铃 | \v | 垂直制表符 |
\b | 退格 | \\ | 反斜杠 |
\f | 换页符 | \“ | 双引号 |
\n | 换行符 | \' | 单引号 |
\r | 换行符 | \[ | 左方括号 |
\t | 制表符 | \] | 右方括号 |
- --字符与数字的隐式转换
- print("10" + 7)
- 输出结果为:17,将字符10隐私转化为Number类型计算
- --字符与数字的显式转换
- print(tonumber("100")+11)
- --输出结果为:111
-- a,c交换数字
-- a=10 c=20
-- a,c=c,a
-- print(a,c)
-- -- 运行结果20 10
-- 插入并交换字符串里的数
-- a="wo is laobi\n"
-- print(a)
-- b=string.gsub(a,"is","1111")
-- print(b)
-- -- 运行结果wo 1111 laobi
可以调用tostring()将数字转成字符串,这种转换一直有效:
-- print(tostring(10)=="10") 结果true
-- print(10 ..""=="10")
str ="11"
print(tonumber(str,2))3
print(tonumber(str,8))9
print(tonumber(str,16))17
条件语句
if 条件 then
系列语句
end
if xxx then xxx end;
if xxx then xxx else xxx end;
if xxx then xxx elseif xxx then xxx else xxx end; //elseif可以有很多个,注意else和if中间没有空格!!
循环语句
while 条件 do | 系列语句 | end
repeat | 系列语句 | until 条件
for ver =exp1,exp2,exp3 do 可以看成C语言 for( ver =exp1;exp2;exp3)exp3
系列语句
end
exp3不写默认为1。
-- for一样
-- 条件
-- for i=1 , 10, 4 do
-- print(i)
-- end运行结果:1 5 9
泛型for循环
-- <var-list>为变量列表 <exp-list>一般为一个函数
-- for <var-list> in <exp-list> do
-- 系列语句
-- end
迭代table元素的(pairs),迭代数组元素的(ipairs)
table2= {"www",name="haha",age=12,sex="boy",3,4,"qqq",5}
for k,v in ipairs(table2) do
print(k,v)
end
print(table2.age)
运行结果:
1 www
2 3
3 4
4 qqq
5 5
t1={1,2,9,[4]="555",[20]="wode",30,7}
for k,v in ipairs(t1) do
print(k,v)
end
运行结果:
1 1
2 2
3 9
4 30
5 7
t1={1,2,9,[4]="555",[20]="wode",30,7}
for k,v in pairs(t1) do
print(k,v)
end
运行结果:
1 1
2 2
3 9
4 30
5 7
20 wode
t2={1,2,3,4,5}table.insert(t2,5,100)//插入
table.remove(t2,3)//删除
上一篇: 解释性脚本语言与编译性语言的区别
下一篇: 道家始祖庄子的养生之道