lua基础教程2-基础语法
hello world
1 | print("hello world!") |
推荐菜鸟教程或者W3Cschool
https://www.w3cschool.cn/lua/lua-basic-syntax.html
基本语法
交互式编程
1 | > print("Hello World!") |
脚本式编程
1 | #!/usr/local/bin/lua |
注释
单行注释
两个减号是单行注释:
1 | -- |
多行注释
1 | --[[ |
标识符
Lua 标示符用于定义一个变量,函数获取其他用户定义的项。标示符以一个字母 A 到 Z 或 a 到 z 或下划线 _ 开头后加上0个或多个字母,下划线,数字(0到9)。
最好不要使用下划线加大写字母的标示符,因为Lua的保留字也是这样的。
Lua 不允许使用特殊字符如 @, $, 和 % 来定义标示符。 Lua 是一个区分大小写的编程语言。因此在 Lua 中 W3c 与 w3c 是两个不同的标示符。以下列出了一些正确的标示符:
1 | mohd zara abc move_name a_123 |
关键词
以下列出了 Lua 的保留关键字。保留关键字不能作为常量或变量或其他用户自定义标示符:
and | break | do | else |
---|---|---|---|
elseif | end | false | for |
function | if | in | local |
nil | not | or | repeat |
return | then | true | until |
while |
一般约定,以下划线开头连接一串大写字母的名字(比如 _VERSION)被保留用于 Lua 内部全局变量。
全局变量
在默认情况下,变量总是认为是全局的。
全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil。
1 | > print(b) |
如果你想删除一个全局变量,只需要将变量赋值为nil。
1 | b = nil |
这样变量b就好像从没被使用过一样。换句话说, 当且仅当一个变量不等于nil时,这个变量即存在。
1 | -- #!/usr/local/bin/lua开头,指定lua的解释器 |
数据类型
Lua是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。
Lua中有8个基本类型分别为:nil、boolean、number、string、userdata、function、thread和table。
数据类型 | 描述 |
---|---|
nil | 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。 |
boolean | 包含两个值:false和true。 |
number | 表示双精度类型的实浮点数 |
string | 字符串由一对双引号或单引号来表示 |
function | 由 C 或 Lua 编写的函数 |
userdata | 表示任意存储在变量中的C数据结构 |
thread | 表示执行的独立线路,用于执行协同程序 |
table | Lua 中的表(table)其实是一个”关联数组”(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过”构造表达式”来完成,最简单构造表达式是{},用来创建一个空表。 |
1 | --- |
nil
nil 类型表示一种没有任何有效值,它只有一个值 – nil,例如打印一个没有赋值的变量,便会输出一个 nil 值:
1 | > print(type(a)) |
对于全局变量和 table,nil 还有一个”删除”作用,给全局变量或者 table 表里的变量赋一个 nil 值,等同于把它们删掉
1 | tab1 = { key1 = "val1", key2 = "val2", "val3" } |
使用 nil 作比较时应该加上双引号:
1 | > type(X) |
boolean
boolean 类型只有两个可选值:true(真) 和 false(假),Lua 把 false 和 nil 看作是”假”,其他的都为”真”(0也是真):
1 | print(type(true)) |
number
Lua 默认只有一种 number 类型 – double(双精度)类型(默认类型可以修改 luaconf.h 里的定义),以下几种写法都被看作是 number 类型:
1 | print(type(2)) |
字符串
字符串由一对双引号或单引号来表示。
也可以用 2 个方括号 “[[]]” 来表示”一块”字符串。
1 | string1 = "this is string1" |
在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字:
1
2
3
4
5
6
7print("2" + 6)
print("2" + "6").
--[[
8
8
--]]字符串连接使用的是 .. ,而不是用的+
1 | print("lvxiaoyi" + ".top") |
table(表)
在 Lua 里,table 的创建是通过”构造表达式”来完成,最简单构造表达式是{},用来创建一个空表。也可以在表里添加一些数据,直接初始化表:
1 | -- 创建一个空的 table |
Lua 中的表(table)其实是一个”关联数组”(associative arrays),数组的索引可以是数字或者是字符串。
1 | a = {} |
不同于其他语言的数组把 0 作为数组的初始索引,在 Lua 里表的默认初始索引一般以 1 开始。
1 | local tbl2 = {"lvxiaoyi.top", "blog", "study", "lvxiaoyi"} |
table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil。