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()