1 Star 1 Fork 0

BRabbitFan / NoteLua

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
1.数据类型.md 5.51 KB
一键复制 编辑 原始数据 按行查看 历史

注释

单行注释 : -- 注释内容
多行注释 : --[[ 注释内容 ]]


数据类型

Lua是动态类型语言 , 变量无需指定数据类型 , 只要赋值即可 .

Lua的基本数据类型汇总

数据类型 描述
nil . 代表一个无效值 , 可视为 null 和 false
boolean 布尔类型 . 值有 true 和 false
number 数字 . 就是double
string 字符串 . 用一对单引号或双引号包围
fuction 函数 . 由C或Lua编写的函数
userdata 自定义类型 . 表示任意存储在变量中的C数据结构
thread 线程 . 表示执行的独立线程
table . 本质是一个关联数组(associative arrays)

示例 (Code/secondLua/simpleTest.lua)

-- 数据类型测试
print(type("Hello world"))      --> string
print(type(10.4*3))             --> number
print(type(true))               --> boolean
print(type(nil))                --> nil
print(type(type))               --> function
print(type(type(X)))            --> string

输出

1.simpltTest输出.png


nil (空)

nil 类型表示空值 , 若输出一个没有被赋值的变量 , 则会输出 nil .

对于全局变量和 table , nil 还有一个删除功能 : 为一个全局变量或 table 赋值 nil 相当于删除该变量 .

示例 (Code/secondLua/nilTest.lua)

tab1 = {key1 = "val1", key2 = "val2"}
for k, v in pairs(tab1) do
  print(k .. " - " .. v)
end
-- 使用赋值nil删除变量
tab1.key1 = nil
for k, v in pairs(tab1) do
  print(k .. " - " .. v)
end

输出

1.nilTest.lua输出.png


boolean (布尔)

在Lua中 , falsenil 表示 , 其余的值(包括0)都表示 .

示例 (Code/secondLua/booleanTest.lua)

print(type(true))
print(type(false))
print(type(nil))
-- 测试nil的boolean值
if false or nil then
  print("至少有一个是true")
else
  print("false和nil都是false")
end
-- 测试0的boolean值
if 0 then
  print("0是true")
else
  print("0是false")
end

输出

1.booleanTest.lua输出.png


number (数字)

Lua中所有数字默认都属于double类型 , 可以在luaconf.h中修改默认类型 .


string (字符串)

可以使用一对单引号或双引号表示一行字符串 , 也可以用两个方括号[[ 字符串 ]]来表示多行字符串 .
字符串之间使用 .. 符号进行连接 . 使用 # 可对字符串计算长度 , 放在字符串前 .

string 与其他类型数据进行连接时 , Lua会尝试将其他数据类型都转换为 string .
当对 string 进行算数操作时 , Lua会尝试将其转换为 number 类型 .

示例 (Code/secondLua/stringTest.lua)

print("2" + 6)
print("2" + "6")
print("2e2" * "6")
str = "qwerty"
print(#str)
print(#"qwerty")

输出

1.stringTest.lua输出.png


table (表)

粗浅的理解可以将table视作 array 与 map 的合体 .

在Lua中 , table 通过"构造表达式"来完成 , 例如{}用来创建一个空表 , 也可以在里面添加数据初始化表 .
Lua的表不同于其他语言的数组 , 其索引从1开始 , 且不固定长度 , 且表内元素可不同类型.

table 实际上是一个"关联数组"(associative arrays) , 数组的索引可以是数字或者是字符串 .

table的索引

对于table的索引有两种方式 :

  1. table[key] -- 针对所有索引类型都可用
  2. table.key -- 当索引类型是字符串时的简化写法

使用 # 可对table计算元素个数 , 放在变量名前 .

示例 (Code/secondLua/tableTest.lua)

-- 创建一个空table
tbl1 = {}
-- 创建一个table并初始化
tbl2 = {1, 2, 3}
-- 创建一个table , 并进行赋值操作 , 修改值操作 , 遍历输出操作
a = {1, 2, 'var'}
a.key = "value"
key = 10
a[key] = 22
a[key] = a[key] + 11
for k, v in pairs(a) do
  print(k .. ":" .. v)
end

输出

1.tableTest.lua输出.png


function (函数)

在Lua中 , 函数被视为变量(第一类值) .
说明函数可以在变量之间赋值传递 , 也可以通过匿名函数(不指定函数名)的方式作为参数传递 .

示例 (Code/secondLua/functionTest.lua)

-- 定义函数
function func(n)
  return n
end
function printNumber(a, b, c)
  print(a + b + c())
end
-- 使用函数赋值变量
func2 = func
-- 使用函数传参
printNumber(func(5), func2(5), 
  function ()
    return 5
  end
)

输出

1.functionTest.lua输出.png


thread (线程)

在Lua中 , 最主要使用的并发方式是协程(coroutine) .

携程与线程类似 , 有自己的栈 , 局部变量 , 指令指针 , 与其他携程共享全局变量等 .
区别 : 线程可同时运行多个 , 而协程同时只能运行一个 , 处于运行状态的携程只有被挂起(suspend)时才暂存 .


userdata (自定义类型)

userdata是一种用户自定义数据 , 用于表示一种由应用程序或C/C++库所创建的类型 .
可以将C/C++的任意数据类型的数据(通常是struct 或 指针)存储到Lua变量中调用 .

Lua
1
https://gitee.com/BRabbitFan/NoteLua.git
git@gitee.com:BRabbitFan/NoteLua.git
BRabbitFan
NoteLua
NoteLua
main

搜索帮助