#是一元运算符,返回字符串或表的长度。 #“Hello” 返回 5
~=不等于
select(’#’, …) 返回可变参数的长度 select(n, …) 用于返回 n 到 select(’#’,…) 的参数
repeat…until 重复执行循环,直到 指定的条件为真时退出循环,即false时一直循环
%a: 与任何字母配对
%d: 与任何数字配对
lua 中没有 continue 语句,可以使用类似下面这种方法实现 continue 语句
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
type(nil)是等于"nil"的,所以print(type(type(nil)))输出string
Lua 把 false 和 nil 看作是 false,其他的都为 true,数字 0 也是 true
在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字
print(“2” + 6)和print(“2” + “6”)都是输出8 。print(“2 + 6”)输出2 + 6
Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。
Lua 对多个变量同时赋值,不会进行变量传递,仅做值传递
a, b = 0, 1 a, b = a+1, a+1 print(a,b)输出1,1
Lua 查找一个表元素时的规则,其实就是如下 3 个步骤:
1.在表中查找,如果找到,返回该元素,找不到则继续
2.判断该表是否有元表,如果没有元表,返回 nil,有元表则继续。
3.判断元表有没有 __index 方法,如果 __index 方法为 nil,则返回 nil;如果 __index 方法是一个表,则重复 1、2、3;如果 __index 方法是一个函数,则返回该函数的返回值。
__newindex 元方法用来对表更新,__index则用来对表访问 。
当你给表的一个缺少的索引赋值,解释器就会查找__newindex 元方法:如果存在则调用这个函数而不进行赋值操作。
mymetatable = {}
mytable = setmetatable({key1 = “value1”}, { __newindex = mymetatable })
print(mytable.key1)
mytable.newkey = “新值2”
print(mytable.newkey,mymetatable.newkey)
mytable.key1 = “新值1”
print(mytable.key1,mymetatable.key1)
以上实例执行输出结果为:
value1
nil 新值2
新值1 nil
– 两表相加操作
mytable = setmetatable({ 5, 2, 3 }, {
__add = function(mytable, newtable)
for i = 1, #newtable do
table.insert(mytable, #mytable+1,newtable[i])
end
return mytable
end
})
secondtable = {8,5,6}
mytable = mytable + secondtable
for k,v in ipairs(mytable) do
print(k,v)
end
__call 元方法在 Lua 调用一个值时调用。以下实例演示了计算表中元素的和:
mytable=setmetatable({2,1,3},{__call=
function(mytable,newtable)
local sum=0;
for i=1,#mytable do
sum=sum+mytable[i];
end
for i = 1, #newtable do
sum=sum+newtable[i]
end
return sum
end
})
secondtable={4,5,6,7,9,8}
print(mytable(secondtable))
__tostring 元方法用于修改表的输出行为。以下实例我们自定义了表的输出内容:
mytable = setmetatable({ 10, 20, 30 }, {
__tostring = function(mytable)
sum = 0
for k, v in pairs(mytable) do
sum = sum + v
end
return "表所有元素的和为 " … sum
end
})
print(mytable)
string.upper(argument):字符串全部转为大写字母。
string.lower(argument):字符串全部转为小写字母。
string.gsub(mainString,findString,replaceString,num)在字符串中替换。
mainString 为要操作的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换)
string.find (str, substr, [init, [end]])
在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil。
string.find(“Hello Lua user”, “Lua”, 1) 7 9
string.reverse(arg)字符串反转
string.format(…)返回一个类似printf的格式化字符串
string.format(“the value is:%d”,4) the value is:4
string.char(arg) 和 string.byte(arg[,int])
char 将整型数字转成字符并连接, byte 转换字符为整数值(可以指定某个字符,默认第一个字符)。
string.len(arg) 计算字符串长度。
string.rep(string, n)返回字符串string的n个拷贝
string.rep(“abcd”,2) abcdabcd
string.gmatch(str, pattern)
回一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到,迭代函数返回nil。
for word in string.gmatch(“Hello Lua user”, “%a+”) do print(word) end
Hello
Lua
user
string.match(str, pattern, init)
string.match()只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1。在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil。
string.match(“I have 2 questions for you.”, “%d+ %a+”)
2 questions
string.sub(s, i [, j])用于截取字符串
s:要截取的字符串。
i:截取开始位置。
j:截取结束位置,默认为 -1,最后一个字符。
table
table.concat (table [, sep [, start [, end]]]):
concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。
table.insert (table, [pos,] value):
在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.
table.remove (table [, pos])
返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。
table.sort (table [, comp])
对给定的table进行升序排序。