Lua 教程-04

原创 2016年08月30日 18:35: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_separated
end
  • optional_function_scope :该参数是可选的制定函数是全局函数还是局部函数,为设置该参数,为全局函数,设置局部函数使用local
  • argument1: 函数参数
  • result_params_comma_separeted:可以有多个返回值,用逗号隔开

实例

lua可以将函数作为参数传递

myprint = function(param)
   print("这是打印函数 -   ##",param,"##")
end
myprint(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/#arg
end

print("平均值为",average(10,5,3,4,5,6))

Lua运算符

lua提供如下几种运算符

算术运算符

类似C中运算符

关系运算符

==;~=;>;<;>=;<=

逻辑运算符

and,or,not

其他运算符

..//链接两个字符串
#//返回字符串或表的长度

运算符优先级

从高到低顺序,除了^和..外所有的二元运算符都是左连接的。

^
not    - (unary)
*      /
+      -
..
<      >      <=     >=     ~=     ==
and
or

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

输出

nil
Lua
Tutorial

数组也可以用负数索引,待查资料….

多维数组

类似C中多维数组。

Lua迭代器

泛型迭代器

泛型for 在自己内部保存迭代函数,实际上它保存三个值:迭代函数,状态常量,控制变量,提供了集合的key/value对

for k, v in pairs(t) do
    print(k, v)
end


array = {"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
    end
end

function ipairs (a)
    return iter, a, 0
end

多状态迭代器

很多情况下,迭代器需要保存多个状态信息而不是简单的状态常量和控制变量,最简单的方法是使用闭包,还有一种方法就是将所有的状态信息封装到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
   end
end

for 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

#include #include #include using namespace std; extern "C" { #include "lua.h"  #include "lualib.h...
  • qq414825553
  • qq414825553
  • 2013年09月12日 16:22
  • 387

Lua 5.2 视频教程

Lua语言具有很强的嵌入优势,可跨平台编译、运行,使用Lua语言可高效开发Cocos2d-x游戏。 你看到的很多国产优秀教程都是从youtube进行再加工的,为何不自己掌握第一手的学习资料呢?虽然刚开...
  • huangbangqing12
  • huangbangqing12
  • 2016年02月25日 15:05
  • 1721

lua--简明教程

概述Lua脚本是一个很轻量级的脚本,也是号称性能最高的脚本,用在很多需要性能的地方,比如:游戏脚本,nginx,wireshark的脚本,当你把他的源码下下来编译后,你会发现解释器居然不到200k,这...
  • lucas421634258
  • lucas421634258
  • 2015年11月13日 17:40
  • 647

Lua教程(二十二)

这篇文章主要介绍了Lua教程(二十二):userdata,这里我们通过一个简单完整的示例来学习一下Lua中userdata的使用方式,需要的朋友可以参考下 在Lua中可以通过自定义类型的...
  • qq8864
  • qq8864
  • 2016年07月22日 21:50
  • 515

cocos2dx-lua开发旅程(一)

最近要做一个手游项目,打算用cocos2dx来做,我也是初学者,网上很多书籍和资料都是采用cocos2dx的c++版本来做开发示例的 很少关于cocos2dx和lua怎么结合在实际项目中的教程,这使...
  • a6627651
  • a6627651
  • 2015年03月05日 16:37
  • 20354

Unity_Lua_VS环境下入门操作

首先安装Lua for Window(不用任何修改,可以直接放在C盘)(记下安装路径),然后我们在VS中安装BabeLua 插件安装完成后重新启动VS,会在菜单栏中多出一个Lua菜单,效果图如下: ...
  • qq_39710961
  • qq_39710961
  • 2017年11月02日 21:38
  • 126

cocos2dx之Lua学习资料汇总

视频教程 http://www.tudou.com/plcover/c-rBWqZ3kw0/
  • u013174689
  • u013174689
  • 2014年08月16日 11:50
  • 1960

Gstreamer官方教程汇总1---Hello World

https://my.oschina.net/u/735973/blog/202253 摘要: 将gstreamer的官方教程做了一下整理,分享给需要的人们。 来源:http://d...
  • STN_LCD
  • STN_LCD
  • 2017年06月26日 11:45
  • 224

LUA教程(游戏UI制作)一

1 - 介绍Lua 是一个扩展式程序设计语言,它被设计成支持通用的过程式编程,并有相关数据描述的设施。 Lua 也能对面向对象编程,函数式编程,数据驱动式编程提供很好的支持。它可以作为一个强大、轻量的...
  • yangxianyy
  • yangxianyy
  • 2009年12月16日 11:30
  • 3379

Lua初学者(一)--Lua 简单教学

基础学习、安装、配置Lua环境,基础篇(一),资源上传百度云,直接下载即可。 有好的个人总结都会后续录入的。...
  • zhuzhuyule
  • zhuzhuyule
  • 2014年11月05日 20:31
  • 1579
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Lua 教程-04
举报原因:
原因补充:

(最多只允许输入30个字)