# 什么是lua编程

# lua基本语法

注释

单行注释符: --

-- 这里的内容就不会执行了

注释

多行注释:

--[[
被包含的区域都不会执行
--]]

标识符

什么是标识符:

1. Lua 标示符用于定义一个变量,函数获取其他用户定义的项。
2. 标示符以一个字母 A 到 Z 或 a 到 z 或下划线 _ 开头后加上0个或多个字母,下划线,数字(0到9)。
3. 最好不要使用下划线加大写字母的标示符,因为Lua的保留字也是这样的。
4. Lua 不允许使用特殊字符如 @, $, 和 % 来定义标示符。
5. 因此在 Lua 中 Miniworld 与 miniworld 是两个不同的标示符

标识符

正确写法:

mini   world   abc   mini_world  a_123
mini521   _mini  c   mi5ni2   MiNi

关键词

以下列出了 Lua 的保留关键字。保留关键字不能作为常量或变量或其他用户自定义标示符:

and break do else elseif end false for function if
in local nil mot or repeat return then true until
while goto

全局变量

在默认情况下,变量总是认为是全局的。 全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil(空值)。

print(b) --未声明的变量b,不会报错,但把b的值打印出来是nil的
------------------
b=10
print(b) --声明的变量b,b的值打印出来是10
------------------
--如果你想删除一个全局变量,只需要将变量赋值为nil。
b = nil
print(b)
--这样变量b就好像从没被使用过一样。换句话说, 当且仅当一个变量不等于nil时,这个变量即存在。

# lua数据类型

数据名称 用法描述
nil 表示一个无效值(在条件表达式中相当于false)
boolean 布尔值,包含两个值:false和true
number 实数,表示双精度类型的实浮点数,也可以是整数
string 字符串,由一对单引号或双引号来表示
table Lua的一种数据结构,可用来创建不同的数据类型,如:数组、字典等
function 由 C 或 Lua 编写的函数
userdata 表示任意存储在变量中的C数据结构
thread 表示执行的独立线路,用于执行协同程序

# 变量

变量概述

什么是变量?

  1. 变量在使用前,必须在代码中进行声明,即创建该变量。
  2. 编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值。
  3. Lua 变量有三种类型:全局变量、局部变量、表中的域。
  4. Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。
  5. 局部变量的作用域为从声明位置开始到所在语句块结束。
  6. 变量的默认值均为 nil。
a = 5               -- 全局变量
local b = 5         -- 局部变量
--------------
function joke()		-- 定义函数
    c = 5           -- 全局变量
    local d = 6     -- 局部变量
end
--------------
joke()
print(c,d)          --> 5 nil

do 
    local a = 6     -- 局部变量
    b = 6           -- 对局部变量重新赋值
    print(a,b);     --> 6 6
end
print(a,b)      --> 5 6

赋值语句

赋值是改变一个变量的值和改变表域的最基本的方法。

a = "hello" .. "world"
--多个变量同时赋值,变量列表和值列表各元素用逗号分开,赋值语句右边的值会依次赋给左边变量。
a, b = 10, 2*x 
--遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作,所以我们可以这样进行交换变量的值:
x, y = y, x                    
a[i], a[j] = a[j], a[i] 

注意

当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:

  1. 变量个数 > 值的个数, 按变量个数补足nil
  2. 变量个数 < 值的个数, 多余的值会被忽略
a, b, c = 0, 1
print(a,b,c)             --> 0   1   nil
 
a, b = a+1, b+1, b+2     -- value of b+2 is ignored
print(a,b)               --> 1   2
 
a, b, c = 0
print(a,b,c)             --> 0   nil   nil
--最后一个例子是一个常见的错误情况,注意:如果要对多个变量赋值必须依次对每个变量赋值。
a, b = f()
--多值赋值经常用来交换变量,或将函数调用返回给变量
--f()返回两个值,第一个赋给a,第二个赋给b。
--应该尽可能的使用局部变量,有两个好处:

--1. 避免命名冲突。
--2. 访问局部变量的速度比全局变量更快。

索引

对 table 的索引使用方括号 []。Lua 也提供了 . 操作。

t[i]
t.i                 -- 当索引为字符串类型时的一种简化写法
gettable_event(t,i) -- 采用索引访问本质上是一个类似这样的函数调用
 site = {}
 site["key"] = "www.mini1.com"
 print(site["key"])
--例子
 print(site.key)
上次更新: 2019-12-26 10:54:13