Lua 数据类型以及函数应用简明教程
数据类型
Lua是动态类型语言,变量不要类型定义,只需要为变量赋值。值可以存储在变量中,作为参数传递或结果返回。在默认情况下,变量总是认为是全局的。
Lua中有8个基本类型分别为:nil、boolean、number、string、userdata、function、thread和table
nil 类型表示一种没有任何有效值,打印一个没有赋值的变量,就会输出nil。
全局变量和table时,设置变量=nil,等同于删除它们。
Lua 默认只有一种 number 类型 -- double(双精度)类型
在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字:
不同于其他语言的数组把 0 作为数组的初始索引,在 Lua里表的默认初始索引一般以 1 开始
函数
基本使用和正常C使用类似。
1.Lua 中我们可以将函数作为参数传递给函数,如
myprint =function(param)
print("这是打印函数 - ##",param,"##")
end
function add(num1,num2,functionPrint)
result = num1+ num2
-- 调用传递的函数参数
functionPrint(result)
end
myprint(10)
-- myprint 函数作为参数传递
add(2,5,myprint)
2.lua 函数可以返回多个值。
s, e= string.find("www.runoob.com","runoob") 返回匹配字符串“开始和结束的下标”
3.Lua函数可以接受可变数目的参数,在函数列表中使用(…)来表示函数由可变的参数。Lua将函数的参数放在一个叫arg的表中,#arg表示传入参数的个数。
- 例如,我们计算几个数的平均值:
function average(...) - result =0
- local arg={...}
- for i,vin ipairs(arg)do
- result = result+ v
- end
- print("总共传入 ".. #arg .. "个数")
- return result/#arg
- end
- print("平均值为",average(10,5,3,4,5,6))
运算符
运算符基本和C一致。
符号运算符:不等于采用 ~=
逻辑运算符: and 、or、not
其它运算符:..连接两个字符串,# 返回字符创或表的长度。a..b ,其中 a为 "Hello " , b为 "World", 输出结果为 "Hello World”。
字符串
1.表示方式:单引号、双引号、[[ ]]。"Lua”、'Lua'、[[Lua"]]
2.字符操作:
string.upper(argument) 字符串全部转为大写字母
string.lower(argument) 字符串全部转为小写字母
string.gsub(mainString,findString,replaceString,num) 在字符串中替换,mainString为要替换的字符串, findString为被替换的字符,replaceString 要替换的字符,num替换次数 string.gsub("aaaa","a","z",3);
zzza 3
string.strfind (str, substr, [init, [end]])
在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil
string.reverse(arg)
字符串反转
string.format(...)
返回一个类似printf的格式化字符串
string.rep(string, n))
返回字符串string的n个拷贝
数组
1.数组默认索引值是从1开始,但是可以指定为0或者负数。
table表
1.table是Lua的一种数据结构,创建不同的数据类型。可以使用任意类型的值作数组索引,大小不固定。
2.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进行升序排序。 |
类
LUA中最基本的结构是table,所以需要用table来描述对象的属性。在初始化时分配内存。
以下简单的类包含了三个属性: area, length 和 breadth,printArea方法用于打印计算结果:
-- Metaclass
Rectangle ={area =0, length= 0, breadth= 0}
-- 派生类的方法new
function Rectangle:new(o,length,breadth)
o = o or {}
setmetatable(o,self)
self.__index= self
self.length= length or0
self.breadth= breadth or0
self.area= length*breadth;
return o
end
-- 派生类的方法 printArea
function Rectangle:printArea()
print("矩形面积为 ",self.area)
end
创建对象:r = Rectangle:new(nil,10,20)
访问属性:使用.点号来访问,r.length
访问成员函数:r: printArea()