Lua是一门简单而强大的语言,其本身强大的扩展性使得这门语言在游戏设计等领域发挥着重要的作用。博主曾在Unity3D中使用过这门语言,并且针对Lua和Unity、C++等方面的内容进行了学习和讨论。最近因为在【游戏脚本高级编程】这本书中详细介绍了Lua脚本的相关内容,因此在这里记录下博主的读书心得,方便以后在需要的时候查阅。

Lua系统构成

Lua系统由Lua链接库、Luac编译器、Lua解释器三部分构成。
* Lua链接库主要由lua.lib和lua.h这两个文件组成。Lua链接库主要负责对自身进行初始化及关闭操作、装载脚本与执行脚本、提
供可调用交互接口。
* Luac编译器是一个由命令行驱动的编译器,其名称为Luac。当我们需要使用Luac编译器来编译一个脚本时,只需输入

>luac <FileName>    //FileName为脚本名称

我们可以直接通过Lua链接库来装载脚本并在装载的过程中实现动态编译,可是这样会造成两个问题,即无法在动态编译过程中获取错误信息和动态编译使脚本加载速度变慢,在使用的时候应该注意到这个问题。
* Lua解释器是一个由命令行驱动的代码运行环境,我们可以直接在这个环境中运行和测试脚本代码。

Lua脚本语法

  • 注释:Lua脚本的注释以–开始,如
> --这是一句注释

当我们需要对多行脚本进行注释的时候,可以采取手动换行的方式进行多个单行的注释。
* 变量:Lua脚本中的变量是无类型的、隐式声明、首个字符必须是非数字字符、对大小写敏感。Lua脚本中变量的一个重要特性生支持多重赋值,即允许在赋值运算符的左边同时写下多个变量。如

-- 变量个数等于数值个数
x,y,z=1,2,3
-- 变量个数大于数值个数,z的值为nil
x,y,z=1,2
-- 变量个数小于数值个数,3这个数值将被忽略
x,y=1,2,3
  • 数据类型:在Lua中支持6种数据类型,即数字(number)、字符串(string)、函数(function)、表(table)、用户数据(userdata)、空值(nil)。
数字(number)指整型和浮点型的数据。
字符串(string)指字符串类型的数据。
函数(function)指一个正式声明的函数的引用。如:
function fib(n)if(n<2) then return nelsereturn fib(n-1)+fib(n-2)end
end
-- 在Lua中函数可以赋值给变量
fib2=fib
-- 调用fib函数
print(fib2(5))
表(table)是Lua语言中最简单同时是最复杂的数据结构:简单如普通数组,复杂如链表、字典、类等。
-- 我们在构造一个数据集合时,不需要指定数据类型和数据大小
-- 完成初始化后的数据集合默认索引从1开始,除非显示地声明索引0处的数值
-- 构造一个数字类型的数组
IntArray={1,2,3,4,5}
-- 构造一个字符串类型的数组
StringArray={"A","B","C","D"}
-- 打印IntArray的第一个元素,输出为1
print(IntArray[1])
-- 显示声明StringArray索引0处的数值
StringArray[0]="E"
-- 打印StringArray的第一个元素和第二个元素,输出为E,A
print(StringArray[0],StringArray[1])
-- 打印一个越界的数组值,输出为nil
print(IntArray[10])
-- 在Lua中表的数据类型可以是不同的
table[0]="table"
table[1]=1
-- 在Lua中表的索引可以是任意类型,因为表是基于键-值原理来工作的
Enemy={}
Enemy["Name"]="Enemy"
Enemy["HP"]=100
Enemy["Speed"]=30
-- 特别地,如果Key是一个合法的字符串类型,那么Table[Key]与Table.Key是等价的。
Enemy={}
Enemy.Name="Enemy"
Enemy.HP=100
Enemy.Speed=30
用户数据(userdata)是Lua语言中一个特殊的数据类型,它允许在Lua脚本的变量中存放C语言中的指针。
空值(nil)是各种语言中通用的一种数据类型,在此不再赘述。
在Lua脚本中我们可以使用type()函数来获取任意数据的类型
  • 逻辑与表达式:Lua和大部分的编程类似支持加减乘除等运算,不同的是在Lua中使用~=来表示不等关系。
    Lua支持的条件逻辑主要有if-then-else以及嵌套的if-then-else,Lua不支持switch结构。Lua支持的循环结构主要有while、for、repea三种结构,如:
-- 这是一个while循环
i=0
while(i<10) doi++print(i)
end-- 这是一个for循环
for i=0,10 doprint(i)
end -- 这是一个repeat循环
repeat print(i)i++
until(i>10)-- 这是一个扩展的for循环,类似于Foreach结构,主要用来遍历表(table)
for key,value in tables doprint(k,value)
end

Lua与C/C++交互

待更新,等研究完以后再更新吧,编译Lua5.3一直没有成功…..

Lua脚本编程:Lua语言入门相关推荐

  1. Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本

    Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本 首先参考http://wiki.chumby.com/index.php?title=Lua&print ...

  2. lua脚本之lua语言简介以及lua的安装

    本博主不擅于进行文字创作,所以,相当一部分文字皆复制于其他博文.还希望能够得到谅解.  一.Lua语言简介 Lua是一个免费的开源软件,可以免费用于科研及商业.Lua具有一个专家团队在维护和升级,其设 ...

  3. 【2G模组Air202开发】Lua脚本编程实现MQTT协议连接Tlink平台(三)

    [2G模组Air202开发]Lua脚本编程实现MQTT协议连接Tlink平台(三) 整体思路: 在TLINK平台上创建一个MQTT协议的设备 对Air202模组进行lua编程并烧录 使用串口向Air2 ...

  4. 【2G模组Air202开发】Lua脚本编程实现MQTT协议连接Tlink平台(五)

    [2G模组Air202开发]Lua脚本编程实现MQTT协议连接Tlink平台(五) 整体思路: 在TLINK平台上创建一个MQTT协议的设备 对Air202模组进行lua编程并烧录 使用串口向Air2 ...

  5. c语言支持脚本编程,lr脚本编程C语言.docx

    lr脚本编程C语言 1.#define COUNT 100#define SALARY 4000Action(){int total;total=COUNT*SALARY;lr_output_mess ...

  6. jdy40程序C语言,lr脚本编程C语言.docx

    lr脚本编程C语言.docx 1.define COUNT 100define SALARY 4000Actionint total;totalCOUNT*SALARY;lr_output_messa ...

  7. lua 去除小数点有效数字后面的0_【物联网学习番外篇】Lua脚本编程扫盲

    在后面的物联网教程中,我们很快就会接触到Lua这个脚本语言,那么本篇内容结合后续的一些需要的开发点,针对Lua零基础的读者写一篇入门扫盲文章. 01 Lua 介 绍 Lua是一个小巧的脚本语言,其目标 ...

  8. Redis 实战 —— 14. Redis 的 Lua 脚本编程

    简介 Redis 从 2.6 版本开始引入使用 Lua 编程语言进行的服务器端脚本编程功能,这个功能可以让用户直接在 Redis 内部执行各种操作,从而达到简化代码并提高性能的作用. P248 在不编 ...

  9. c语言的积木编程,c语言入门3,自己造积木,掌握它就能随心所欲的完成各种工作了...

    前面两节介绍了如何快速搭建 C 语言开发学习环境,并且给出并解释了 hello world 的代码.上一节介绍了C语言的函数,应该注意到,到目前为止,我们使用的函数都是现有的系统函数(例如 print ...

最新文章

  1. python无法打印unicode编码_【整理】Python中实际上已经得到了正确的Unicode或某种编码的字符,但是看起来或打印出来却是乱码...
  2. mysql5.5的方言_mysql方言问题
  3. java递归老鼠走迷宫_递归算法求老鼠走迷宫(C语言)
  4. python将视频一帧一帧_python 用opencv接口把视频逐帧转化为图片
  5. axure rp编辑html模板,AxureRP教程—用模板封装UI标准
  6. 微信服务号获取地理位置
  7. 零基础数学建模学习日记Day1
  8. nRF52283开发板 基于ble_peripheral\ble_app_blinky_c (LED Button Service Client) 针对服务端的新增LED1子服务
  9. eNSP华为路由器与交换机连接
  10. C语言编程练习:约分最简分式
  11. 手机写python爬虫_我用手机写了一个Python爬虫,爬下了《凡人修仙传》……
  12. 计算机的用户账户无法更改密码,windows不能更改密码怎么办【解决方法】
  13. 笔记本电脑没有wifi图标导致没有网
  14. 这才是2019年最新资料!
  15. acl 2020 Question Answering
  16. 使用DB2 pureXML管理蛋白质数据库
  17. plotly使用指南
  18. 使用Monkey对apk做稳定性测试
  19. JavaScript 中addEvent事件参数详解
  20. 高职计算机期末质量分析,计算机考试质量分析

热门文章

  1. 基于大数据的人工智能应用-周靖人
  2. 情人节程序员用HTML网页表白【告白模板】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  3. 解决由于export,import错误导致的元素类型无效【Element type is invalid】
  4. 推荐几款免费的图床和图片处理工具
  5. 本地mysql数据库安装
  6. 【NOIP2017提高组】奶酪
  7. ps怎么保存html,ps怎么保存为HTML格式
  8. 【VUE音乐播放器】获取QQ音乐播放源地址
  9. 使用Qt实现米字段数码管十七段数码管LED数码管控件
  10. 离散式生产和流程式生产的区别