Lua 教程-04
来源:互联网 发布:苹果在线软件下载 编辑:程序博客网 时间:2024/05/17 12:46
Lua变量
- 变量在使用前,必须进行声明
- 变量的三种类型:全局变量,局部变量,表中的域
- 除非用local显示声明为局部变量,否则都是全局变量,比如语句块中也是。尽可能使用局部变量,访问速度快,避免冲突
赋值语句
- lua中可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会一次赋给左边的变量。
a,b = 10,2*x变量个数 > 值的个数 按变量个数补足nil变量个数 < 值的个数 多余的值会被忽略
索引
对table的索引使用方括号[],也提供了.操作:
t[i]t.i -- 当索引为字符串类型时的一种简化写法
Lua循环
循环类型
Lua 语言提供了以下几种循环处理方式:
- while循环
- for 循环
- repeat..until
控制语句
-break语句,跳出当前循环
Lua 流程控制
Lua中false和nil为假,true和非nil为真.
if c<1 and a<b then val=0 elseif c>=d and a>b then val=0 else val=a-b end
Lua 函数
函数定义
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn) function_body return result_params_comma_separatedend
- optional_function_scope :该参数是可选的制定函数是全局函数还是局部函数,为设置该参数,为全局函数,设置局部函数使用local
- argument1: 函数参数
- result_params_comma_separeted:可以有多个返回值,用逗号隔开
实例
lua可以将函数作为参数传递
myprint = function(param) print("这是打印函数 - ##",param,"##")endmyprint(10)
可变参数
Lua函数可以接受可变数目的参数,和C语言类似,使用三点(…)表示函数有可变的参数.
Lua将函数参数放在一个叫arg的表中,#arg表示传入参数的个数
function average(...) result = 0 local arg={...} for i,v in ipairs(arg) do result = result + v end print("总共传入 " .. #arg .. " 个数") return result/#argendprint("平均值为",average(10,5,3,4,5,6))
Lua运算符
lua提供如下几种运算符
算术运算符
类似C中运算符
关系运算符
==;~=;>;<;>=;<=
逻辑运算符
and,or,not
其他运算符
..//链接两个字符串#//返回字符串或表的长度
运算符优先级
从高到低顺序,除了^和..外所有的二元运算符都是左连接的。
^not - (unary)* /+ -..< > <= >= ~= ==andor
Lua 字符串
Lua中字符串是由数字,字母,下划线组成的一串字符,有三种方式:
- 单引号间一串字符
- 双引号间的一串字符
- [[]]间的一串字符
转义字符
和C中类似
字符串操作
string.upper(argument)string.lower(argument)string.gsub(mainString,findString,replaceString,num)//在字符串中替换,mainString为要替换的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换)string.strfind (str, substr, [init, [end]])//在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil。string.reverse(arg)//字符串反转string.format(...)//返回一个类似printf的格式化字符串string.char(arg) 和 string.byte(arg[,int])char //将整型数字转成字符并连接, byte 转换字符为整数值(可以指定某个字符,默认第一个字符)。string.len(arg)//计算字符串长度。string.rep(string, n))//返回字符串string的n个拷贝..//链接两个字符串
Lua 数组
一维数组
array = {"Lua", "Tutorial"}for i= 0, 2 do print(array[i])end
输出
nilLuaTutorial
数组也可以用负数索引,待查资料….
多维数组
类似C中多维数组。
Lua迭代器
泛型迭代器
泛型for 在自己内部保存迭代函数,实际上它保存三个值:迭代函数,状态常量,控制变量,提供了集合的key/value对
for k, v in pairs(t) do print(k, v)endarray = {"Lua", "Tutorial"}for key,value in ipairs(array) do print(key, value)end
注:pair(t)为表达式列表。以上实例中我们使用了 Lua 默认提供的迭代函数 ipairs。
lua迭代器包含以下两种类型:
- 无状态迭代器
- 多状态迭代器
无状态迭代器
无状态迭代器是指不保留任何状态的迭代器。每一次迭代,迭代函数都是用两个变量(状态常量和控制变量)的值作为参数被调用,一个无状态的迭代器只利用这两个值可以获取下一个元素。
function iter (a, i) i = i + 1 local v = a[i] if v then return i, v endendfunction ipairs (a) return iter, a, 0end
多状态迭代器
很多情况下,迭代器需要保存多个状态信息而不是简单的状态常量和控制变量,最简单的方法是使用闭包,还有一种方法就是将所有的状态信息封装到table内,将table作为迭代器的状态常量,因为这种情况下可以将所有的信息存放在table内,所以迭代函数通常不需要第二个参数。
array = {"Lua", "Tutorial"}function elementIterator (collection) local index = 0 local count = #collection -- 闭包函数 return function () index = index + 1 if index <= count then -- 返回迭代器的当前元素 return collection[index] end endendfor element in elementIterator(array)do print(element)end
Lua table
Lua table 使用关联数组。
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 教程-04
- LUA教程
- lua教程
- Lua教程
- lua教程
- lua教程
- lua教程
- Lua 教程
- Lua教程
- Lua 教程
- LUA语言教程 [转]
- LUA语言学习教程
- LUA语言学习教程
- lua教程摘录
- lua教程 - 入门基础
- 《Lua中文教程》读书笔记
- Lua简明教程
- Lua语言教程1
- [CC] Cocos2d-x热更新后台实现
- [数据结构]二叉查找树-基础版
- Freemarker中Configuration的setClassForTemplateLoading方法参数问题
- 策略模式
- Jmeter带cookie请求
- Lua 教程-04
- java复习(5)—String、StringBuilder和StringBuffer
- Git merge和git branch 分支与合并
- php Session 跨页面就读不出来怎么办呢
- Android的Camera用SurfaceView拍照
- Menu和Dialog小结
- 102. Binary Tree Level Order Traversal
- 模板方法模式
- Redis快速入门:初识Redis