lua笔记
string(字符串)字符串由一对双引号或单引号来表示。
string1 = "this is string1"
string2 = 'this is string2'
也可以用 2 个方括号 "[ [ ] ]" 来表示"一块"字符串。
_str2=[[my name is jack!]]
print(_str2)
- 在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字:
print("1"+5) --6
("1"+"6") --7
print("3+7") -- "3+7"
- 关于字符串拼接,使用.. 对字符串进行拼接
value=11
print("value="..value) --value=11
- 使用 # (井号)来计算字符串的长度,放在字符串前面,如下实例:
mail = "ukraine_lee@163.com"
print(#mail)
--19
日期格式化:
day=1
month=5
year=2017
date=string.format("日期:%02d/%02d/%03d",day,month,year)
print(date)
Table(表)
在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是大括号{},用来创建一个空表。也可以在表里添加一些数据,直接初始化表:
-- 创建一个空的 table
local tbl1 = {}
--python字典初始化 dict = {'a': 1, 'b': 2, 'b': '3'} 列表(List)初始化['physics', 'chemistry', 1997, 2000]
--Python的数组分三种类型:
--(1) list 普通的链表,初始化后可以通过特定方法动态增加元素。
--定义方式:arr = [元素]
--(2) Tuple 固定的数组,一旦定义后,其元素个数是不能再改变的。
--定义方式:arr = (元素)
--(3) Dictionary 词典类型, 即是Hash数组。
--定义方式:arr = {元素k:v}
-- 直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"} --苹果,梨,橙子,葡萄
local tbl2={X=3,y=4} --指定键值初始化 X,Y是键,值是3,4
不同于其他语言的数组把 0 作为数组的初始索引,在 Lua 里表的默认初始索引一般以 1 开始。
local tbl = {"apple", "pear", "orange", "grape"}
for key, val in pairs(tbl) do
print("Key", key)
end
-- 1 2 3 4
table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil。
表函数的定义和使用:
tab={x=2,y=3}
function tab:setValue(m_x,m_y) --注意定义的时候使用了:冒号
tab.x=m_x
tab.y=m_y
end
tab:setValue(5,6) --注意,在调用的时候也必须和定义时一致使用冒号。
print(tab.x,tab.y)
- Table连接:
m_table={"a","b","c"}
temp=table.concat(m_table) --注意table是关键字
print(temp)
- 插入和移除:
插入:
m_table={"a","b","c"}
table.insert(m_table,"d")
print(m_table[4])
移除:
table.remove(m_table) --移除方法,会移除最后一个元素
for k,v in pairs(m_table) do
print(k,v)
end
function (函数)
函数还可以像下面这样存在一个变量里:
function function_name(n_value)
return n_value+1
end
print(function_name(7))
--这里同python的使用很像
func_self=function_name
print(func_self(5))
while 循环
Lua 编程语言中 while 循环语法:(注意不同于C# 语句没有大括号)
语法:
while(condition)
do
statements
end
实例:
a=1
while( a < 5 )
do
print("a 的值为:", a)
a = a+1
end
for 循环
数值for循环
Lua 编程语言中 for 循环语句可以重复执行指定语句,重复次数可在 for 语句中控制。
Lua 编程语言中 for语句有两大类:(注意与C#的for 循环有较明显区别)
第一种:数值for循环
for var=exp1,exp2,exp3 do
<执行体>
end
var从exp1变化到exp2,每次变化以exp3为步长递增var,并执行一次"执行体"。exp3是可选的,如果不指定,默认为1。
实例:
for i=1,5 do
print(i)
end
泛型for循环
泛型for循环通过一个迭代器函数来遍历所有值
在lua中pairs与ipairs两个迭代器的用法相近,但有一点是不一样的:
pairs可以遍历表中所有的key,包含索引,和自定义类型key
ipairs 仅可以遍历出具备索引的值
_table2={"Suanday","Monday"}
_table2["ukey"]="uvalue" --键值都是字符串
intkey=8
_table2[intkey]="uvalue" --键是number 值是字符串
for k,v in ipairs(_table2) do
print(k,v)
end
-- 输出结果是 (table2 中仅具备索引的2个值被输出了)
1 Suanday
2 Monday
for k,v in pairs(_table2) do
print(k,v)
end
-- 输出结果是(所有的键值均被输出)
1 Suanday
2 Monday
ukey uvalue
8 uvalue
运算符
关系运算符
~= 不等于,检测两个值是否相等,相等返回 false,否则返回 true
逻辑运算符
not 逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。
设定 A 的值为 true,B 的值为 false:
not(A and B) 为 true。
其他运算符
.. 连接两个字符串 a..b ,其中 a 为 "Hello " , b 为 "World", 输出结果为 "Hello World"。
# 一元运算符,返回字符串或表的长度。 #"Hello" 返回 5
shotting source code