千家信息网

Lua基本类型有哪些

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"Lua基本类型有哪些"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Lua基本类型有哪些"文章能帮助大家解决问题。Lua是一种动态类型的语言。
千家信息网最后更新 2026年11月03日Lua基本类型有哪些

这篇文章主要介绍"Lua基本类型有哪些"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Lua基本类型有哪些"文章能帮助大家解决问题。

Lua是一种动态类型的语言。在语言中没有类型定义的语法,每个值都带有其自身的类型信息。在Lua中有8中基本类型。

数据类型描述
nil这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean包含两个值:false和true。
number表示双精度类型的实浮点数
string字符串由一对双引号或单引号来表示
function由 C 或 Lua 编写的函数
userdata表示任意存储在变量中的C数据结构
thread表示执行的独立线路,用于执行协同程序
tableLua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

我们可以使用 type 函数测试给定变量或者值的类型:

实例

print(type("Hello world"))      --> stringprint(type(10.4*3))             --> numberprint(type(print))              --> functionprint(type(type))               --> functionprint(type(true))               --> booleanprint(type(nil))                --> nilprint(type(type(X)))            --> string

nil(空)

nil 类型表示一种没有任何有效值,它只有一个值 — nil,例如打印一个没有赋值的变量,便会输出一个 nil 值:

print(type(a))nil>

对于全局变量和 table,nil 还有一个"删除"作用,给全局变量或者 table 表里的变量赋一个 nil 值,等同于把它们删掉,执行下面代码就知:

tab1 = { key1 = "val1", key2 = "val2", "val3" }for k, v in pairs(tab1) do   print(k .. " - " .. v)endtab1.key1 = nilfor k, v in pairs(tab1) do   print(k .. " - " .. v)end

nil 作比较时应该加上双引号 ":

> type(X)nil> type(X)==nilfalse> type(X)=="nil"true>

type(X)==nil 结果为 false 的原因是 type(X) 实质是返回的 "nil" 字符串,是一个 string 类型:

type(type(X))==string

boolean(布尔)

boolean 类型只有两个可选值:true(真) 和 false(假),Lua 把 false 和 nil 看作是 false,其他的都为 true,数字 0 也是 true: 实例

print(type(true))print(type(false))print(type(nil))if false or nil then   print("至少有一个是 true")else   print("false 和 nil 都为 false")endif 0 then   print("数字 0 是 true")else   print("数字 0 为 false")end

以上代码执行结果如下:

$ lua test.luabooleanbooleannilfalse 和 nil 都为 false数字 0 是 true

number(数字)

Lua 默认只有一种 number 类型 — double(双精度)类型(默认类型可以修改 luaconf.h 里的定义),以下几种写法都被看作是 number 类型:

实例

print(type(2))print(type(2.2))print(type(0.2))print(type(2e+1))print(type(0.2e-1))print(type(7.8263692594256e-06))

以上代码执行结果:

numbernumbernumbernumbernumbernumber

string(字符串)

字符串由一对双引号或单引号来表示。

string1 = "this is string1"string2 = 'this is string2'

也可以用 2 个方括号 "[[]]" 来表示"一块"字符串。

实例

html = [[   "http://www.runoob.com/">菜鸟教程]]print(html)

以下代码执行结果为:

   "http://www.runoob.com/">菜鸟教程

在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字:

> print("2" + 6)8.0> print("2" + "6")8.0> print("2 + 6")2 + 6> print("-2e2" * "6")-1200.0> print("error" + 1)stdin:1: attempt to perform arithmetic on a string valuestack traceback:       stdin:1: in main chunk       [C]: in ?>

以上代码中"error" + 1执行报错了,字符串连接使用的是 .. ,如:

> print("a" .. 'b')ab> print(157 .. 428)157428>

使用 # 来计算字符串的长度,放在字符串前面,如下实例:

实例

> len = "www.runoob.com"> print(#len)14> print(#"www.runoob.com")14>
导读table(表)


在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。也可以在表里添加一些数据,直接初始化表:

实例

-- 创建一个空的 tablelocal tbl1 = {}-- 直接初始表local tbl2 = {"apple", "pear", "orange", "grape"}

Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。

实例

-- table_test.lua 脚本文件a = {}a["key"] = "value"key = 10a[key] = 22a[key] = a[key] + 11for k, v in pairs(a) do   print(k .. " : " .. v)end

脚本执行结果为:

$ lua table_test.luakey : value10 : 33

不同于其他语言的数组把 0 作为数组的初始索引,在 Lua 里表的默认初始索引一般以 1 开始。

实例

-- table_test2.lua 脚本文件local tbl = {"apple", "pear", "orange", "grape"}for key, val in pairs(tbl) do   print("Key", key)end

脚本执行结果为:

$ lua table_test2.luaKey    1Key    2Key    3Key    4

table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil。

实例

-- table_test3.lua 脚本文件a3 = {}for i = 1, 10 do   a3[i] = ienda3["key"] = "val"print(a3["key"])print(a3["none"])

脚本执行结果为:

$ lua table_test3.luavalnil

function(函数)

在 Lua 中,函数是被看作是"第一类值(First-Class Value)",函数可以存在变量里:

实例

-- function_test.lua 脚本文件function factorial1(n)   if n == 0 then       return 1   else       return n * factorial1(n - 1)   endend>print(factorial1(5))factorial2 = factorial1print(factorial2(5))

脚本执行结果为:

$ lua function_test.lua120120

function 可以以匿名函数(anonymous function)的方式通过参数传递:

实例

-- function_test2.lua 脚本文件function testFun(tab,fun)       for k ,v in pairs(tab) do               print(fun(k,v));       endendtab={key1="val1",key2="val2"style="color: Olive;">};testFun(tab,function(key,val)--匿名函数       return key.."="..val;end);

脚本执行结果为:

$ lua function_test2.luakey1 = val1key2 = val2

thread(线程)

在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。

线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。

userdata(自定义类型)

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

关于"Lua基本类型有哪些"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

类型 字符 字符串 实例 变量 数字 脚本 结果 函数 数据 数组 代码 只有 引号 文件 线程 表达式 程序 索引 语言 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网络科技 亿人帮互联网科技有限公司 深圳期待互联网科技 上海亿帐通互联网科技 团飞科技与伯堂互联网服务平台 金融科技与互联网金融相同和不同 智腾互联网科技有限公司 阿大互联网科技有限公司 移动互联网年度科技创新 玉溪互联网科技怎么选 注册互联网科技公司经营范围大全 健康食品互联网创新科技园项目 中国互联网公司排名锤子科技 威龙国际互联网科技公司 中科明德北京互联网科技 城市宝互联网科技有限公司 互联网科技股为什么大涨 宇信科技在杭州互联网排第几 互联网科技手抄报图片 互联网时代高科技布局 有马互联网科技 南京欣网互联网科技 科技伦理 互联网公司 深圳市罗太互联网科技有限公司 滨湖区互联网智能科技产品有哪些 中天科技中国工业互联网 厦门江牛科技互联网 互联网科技融合创新 扫呗互联网科技有限公司 神州科技互联网有限公司
0