Lua编程

Lua(请不要念成“撸啊”),一款被设计成可用于包括游戏、网站和图形处理等多方面等各类应用的轻量级可嵌入的脚本语言,在很多游戏游戏中得到应用,例如:Don't Starve,Don't Starve Together,Crusader Kings II,Europa Universalis IV,Crypt of the NecroDancer,等等。

要阅读本章的内容,你需要对计算机编程的概念有基本的了解。

首先为那些已经学习过 #编译原理 的童鞋献上Lua的AST

标识符/Identifiers

Lua中的标识符,可以是任何以字母或下划线开始,由字母([a-zA-Z])、数字([0-9])或下划线('_')构成的字符串。

Lua对大小写敏感,也就是说 Lua 跟 LUA 是不同的两个标识符。

关键字/Key words

Lua提供了共计21个关键字,即:

and

break

do

else

elseif

end

false

for

function

if

in

local

nil

not

or

repeat

return

then

true

until

while

由于 Lua 是对大小写敏感的语言: 尽管 and 是保留字,但 And 和 AND 却是两个不同且合法的标识符。

按照惯例,以下划线开头的标识符保留为 Lua 内部变量。

其他符号:

+   -  *   /   ^  =  ~  =  <

=  >  =    =  =  (  )

{  }  [  ]  ;  :  ,   .   ..   ...

字符串

字符串(Literal string)可以通过匹配单引号或者双引号进行界定,并且可以包括下列类C转义序列(escape sequence):

另外,换行还可以用转义符'\newline'表示;字符可以以 '\d'、'\dd' 或 '\ddd'(其中字母 d 表示十进制数字,decimal digit)的形式,用其对应数值表示;Lua 字符串可以包含任何 8 位字符,包括 '\0'。

Lua 字符串还可以用一对形如 [[ ... ]] 的双方括号界定,如此可以跨行定义字符串,并且可以嵌套。

数字常数

Lua 的数字常数与 C 语言类似,以下是一些示例:

3   3.0   3.1416   314.16e-2   0.31416E1

注释

Lua 的注释以两个连续的连接符,即 -- 开头

类型

Lua 是一种动态类型语言。这就意味着变量没有类型,而只有值才具有类型。

Lua 中有 8 种基本类型: nil, boolean, number, string, function, userdata, thread 和 table。其中number是双精度浮点数,string是 8 bit 字符串。

赋值Assignment

Lua,正如JavaScript一样,是一种类型松散(loose typing)的脚本语言;换言之,与C/C++和Java等强类型定义语言中要求声明(declare)变量时必须选择变量的类型不同,Lua赋值时只需要变量名和变量值:

my_var = "hello"

短路求值/Minimal evaluation

由于Lua内核是基于C语言编写的,支持短路求值自然不足为奇。

所谓短路求值,即在以下Lua代码

if condition_A and condition_B and condition_C then

中,首先计算 condition_A 的真值,若 condition_A 为假(false),则跳出;否则依次计算下一个布尔表达式的真值,直到出现假或者全部表达式都计算完毕为止。

表/Table

Lua的设计者在其语法中引入了表的概念,用以表示中的数组(Array)和图(Map)两种数据结构。

1、创建一个表

你可以创建一个以字符串为键(Key)的表,即:

my_map = { apple = 5, banana = 10, melon = 9 }

或者一个类似数组的表,即:

my_array = { "Tom", "Jack", "Peter" }

2、修改表中的数据

如果你的表是以字符串为键的,那么你可以:

my_map.apple = 15

或者

my_map["apple"] = 17

如果你的表示以数字为键的,那么你可以:

my_array[1] = "Tompson"

请注意,Lua中以数字为键的表跟C/C++中数组不同,也就是 my_array[0] 的值是 nil。

表的遍历

以字符串为键的表通过以下语法进行遍历:

for k, v in pairs(my_map) do

而以数字为键的表则是:

for i, v in ipairs(my_array) do

控制结构

选择

if exp then

block

elseif exp then

block

else

block

end

当型循环

while exp do

block

end

直到型循环

repeat

block

until exp

从循环中跳出

在循环结构中使用 return 和 break 可以跳出。

java模仿饥荒地图生成_饥荒联机版自制MOD教程 自己怎么制作MOD (6) _Lua编程_游侠网...相关推荐

  1. 饥荒联机版服务器搭建教程-WeGame

    Don't Strave Together 服务器搭建教程之WeGame 目录结构 文档\Klei\DoNotStarveTogetherRail\MyDediServerRail MyDediSer ...

  2. JAVA模仿钉钉生成钉钉群组头像

    钉钉群组头像最多4张,根据大神的java实现仿微信群组合头像改的,地址:https://www.cnblogs.com/zovon/p/4345501.html import java.awt.Col ...

  3. mysql生成饼状图_ireport 5.6教程之饼图制作过程

    设计好报表后,把*.jasper文件拷贝到工程中,可以开始编码了,但是上一篇写的只是设计器中预览出现中文,而程序生成的PDF报表依旧不能显示中文,这篇将会做个补充. 先填代码吧: Java代码 1.  ...

  4. 异星工厂 自动机器人_异星工厂建设机器人怎么用 异星工厂建设机器人机制介绍-游侠网...

    异星工厂建设机器人怎么用?想必有些小伙伴还不是很清楚的吧,下面小编就为大家带来了异星工厂建设机器人机制介绍,一起来了解一下吧. 异星工厂建设机器人机制介绍 建设机器人一种浮空的自动化设备,可以建造或修 ...

  5. c fread 快读 详解_梨的简笔画画法教程详解【彩色】__水果_水果简笔画图片_学画画网...

    2020-10-20 11:43:58 来源:简笔画教程 作者: 小西 导读: 美味的梨的简笔画怎么画?梨的简单的画法教程,手把手的教你画梨的简笔画,喜欢就跟着教程一起来学吧. 梨的简笔画画法教程详解 ...

  6. 尼尔 斗技场 机器人_尼尔机械纪元竞技场ex难度全关卡打法流程图文攻略 准备工作-游侠网...

    竞技场ex难度可以说是非常之难,无论是什么怪物攻击玩家都是一击必杀,所以想要打通全部关卡还是比较难的.所以今天小编带来的就是玩家"Kainersoul"分享的尼尔机械纪元竞技场ex ...

  7. rust机枪塔攻击模式_亿万僵尸机枪塔怎么用最厉害 机枪塔使用技巧图文解析-游侠网...

    除了兵以外,建筑对于防御涞来说也是不可或缺的,但是很多玩家不是特别清楚机枪塔怎么用.今天的文章中小编为大家带来的就是玩家"牛达"测试分享的亿万僵尸机枪塔使用技巧图文解析,一起过来看 ...

  8. 饥荒如何修改服务器人数上限,饥荒联机版房间人数上限修改图文教程_饥荒联机版房间人数上限怎么修改_牛游戏网...

    饥荒联机版是一款动作冒险类生存游戏,在腾讯TGP平台非常火爆,联机版实现玩家在同一个生成地图上进行游戏,但是很多玩家在创建房间的时候发现最大玩家数只能6人,不够用,不知道怎么把人数上限提高,当然游戏中 ...

  9. tgp饥荒服务器修改人数,饥荒联机版房间人数上限修改图文教程

    饥荒 联机 版是一款 动作 冒险 类 生存 游戏,在腾讯TGP平台非常火爆,联机版实现玩家在同一个生成 地图 上进行游戏,但是很多玩家在创建房间的时候发现最大玩家数只能6人,不够用,不知道怎么把人数上 ...

最新文章

  1. 特征工程+特征组合+特征交叉+特征变换+生成特征
  2. C#判断文件及文件夹是否存在并创建
  3. 个人站立会议(11月17日)
  4. 包python_Python 包:
  5. vim格式粘贴错乱的解决办法
  6. Extjs Window用法详解 2 打印具体应用
  7. 鸿蒙系统8月9日发布,8月9日,华为发布EMUI10.0系统+展示鸿蒙系统
  8. 求链表相交时的交点(C语言)
  9. cocos2dx标准容器_cocos2dx基础篇(5)——浅析几个重要类
  10. 用 JAVA 开发游戏连连看(之四)添加更多的功能
  11. Eclipse| Eclipse安装中文版本教程
  12. mujoco win7下载安装
  13. 华为鸿蒙智能家居套件价格,华为全屋智能家居方案价格
  14. matlab中.mat文件用法
  15. ong拼音汉字_汉语拼音ong的发音方法
  16. 1.18 物主代词 形容词 宾语从句
  17. bert之我见-attention
  18. 产品级Flutter开源项目FunAndroid,Provider MVVM的最佳实践
  19. 使用标准输出流(system.out)和打印流 (PrintWriter)来读取txt文件
  20. 20162330 第十周 蓝墨云班课 十字链表

热门文章

  1. 四川翌加:抖音合拍功能怎么使用?有什么好处?
  2. 卢松松的QQ号被封:原因是批量拉群
  3. 可以锁定计算机的组合键,电脑锁定快捷键是哪两个组合键
  4. 长沙牛偶计算机学校,长沙科技工程学校美术特色
  5. ssm运动器材共享平台 毕业设计-附源码201816
  6. 【DRM】DRM Display Driver Guide
  7. 联发科将于今年晚些时候推出支持5G的7nm芯片组
  8. Ubuntu搭建原神3.5版本服务器
  9. BugKu——闪电十六鞭
  10. 中国移动苏州研发中心副总经理孙少陵:打造开源生态,助力数字化创新