Lua数据类型

news/2024/12/25 2:27:21/

Lua 语言

数据类型

Lua 有以下数据类型:

  • nil:表示一个无效值,相当于 NULL。
  • boolean:true 或 false。
  • number:整数或浮点数。
  • string:字符串。
  • function:函数。
  • userdata:用户数据。
  • thread:线程。
  • table:表。

nil

nil 表示一个无效值,相当于 NULL。
一个变量在第一次赋值前的默认值是 nil。

lua">local x = nil
print(x) -- nil
print(nil) -- nil

boolean

boolean 类型只有 true 和 false 两个值。
Lua 中 nil 和 false 为"假",其它所有值均为"真"。比如 0 和空字符串(“”) 就是"真" 。

lua">print(true) -- true
print(false) -- false
print(nil) -- nil
print(123) -- true

number

number 类型可以表示整数或浮点数。
可以使用数学函数 math。
floor(向下取整) 和 math.ceil(向上取整) 进行取整操作

底层实现:一般地,Lua 的 number 类型就是 C/C++中的 long long int 或 double
类型来实现的 ( Standard Lua uses 64-bit integers and double-precision ( 64-bit) floats )。
语法结构的简单是付出空间代价换来的。

lua">print(123) -- 123
print(3.14) -- 3.14

string

string 类型用来表示文本。
使用一对匹配的单引号。
Lua 中没有字符类型,所谓的字符类型也是含有一个字符的字符串而己。
字符串还可以用一种长括号(即[[ ]]) 括起来的方式定义。其好处就在于: 1 -> 转义
并不展开(此举,跟 C++11 中 R"(hello lua)"相似) , 2 -> 便于多行书写。
Lua 中的字符串没有[]下标的概念。

[=[ ]=]等号两侧不可以用空格,主要起到层级/配对的作用。

lua">print("Hello, world!") -- Hello, world!
print('Hello, world!') -- Hello, world!
print([[Hello,
world!]]) -- Hello, world!print("Hello" .. "world!") -- Helloworld!
print("Hello" .. " " .. "world!") -- Hello world!

function

函数,在 Lua 中也是一种数据类型
function 类型用来表示函数。
函数可以存储在变量中,可以通过作参数传递给其他函数,还可以作为其他函数的返
回值。其上行为同普通变量无异

lua">function add(a, b)return a + b
endprint(add(1, 2)) -- 3

有名函数的定义本质上是:匿名函数对变量的赋值。为说明这一点,其如下写法也是
合法的。

lua">function foo()
end
等价于
foo = function ()
end
类似的
local function foo()
end
等价于
local foo = function ()
end

函数入参无类型/返值无限制

lua">function hello(a, b)
print("a:", type(a), "b:", type(b))
print(a, b)
return 1, 2, 3, 4, 5
end

userdata

userdata 类型用来表示用户数据。

lua">-- 创建一个 userdata
local obj = {}-- 给 userdata 设置元表
setmetatable(obj, {__add = function(a, b)return a.value + b.valueend
})-- 设置 userdata 的值
obj.value = 10-- 调用 userdata 的元方法
print(obj + obj) -- 20

thread

thread 类型用来表示线程。

lua">-- 创建一个线程
local thread = coroutine.create(function()for i = 1, 10 doprint(i)coroutine.yield()end
end)-- 启动线程
coroutine.resume(thread)-- 等待线程结束
coroutine.status(thread) -- dead

table

Table 类型中一种基于 k-v 类型,实现了一种抽象的 “map<k,v>”。"map<k,v>"是
一种具有特殊索引方式的数组

table 类型用来表示表。

索引 k 通常是字符串(string) 或者 number 类型,但也可以是除 nil 以外的任意类型
的值。
v 则可以是 lua 中的任意类型

对于无 key 的类型,此时的 key 类型为 number,下标从 1 开始,下标依次累加。

lua">-- 创建一个空表
local t = {}-- 给表设置字段
t.name = "Alice"
t.age = 25-- 访问表的字段
print(t.name) -- Alice
print(t.age) -- 25-- 创建一个有初始值的表
local t2 = {name = "Bob", age = 30}-- 遍历表
for k, v in pairs(t2) doprint(k, v)
end-- 输出:
-- name Bob
-- age 30local arr = {1, 2, 3, 4, 5, 6, 7, 8}
for i = 1, 8 do
print(arr[i])
end
lua">local corp = {
web = "www.edu.nzhsoft.cn", -- k = "web"
-- v = "edu.nzsoft.cn"
telephone = "17090078295", -- k = "telephone"
-- v = "17090078295"
staff = {"jack","Scott","Gary"},
10086, -- key = 1 v = 10086
10010, -- key = 2 v = 10010
[10] = 160, -- key = 10 v = 160
["city"] = "guangzhou"
}
print(corp.web) -->output:edu.nzsoft.cn
print(corp["telephone"]) -->output:17090078295
print(corp[2]) -->output:100191
print(corp["city"]) -->output:"Beijing"
print(corp.staff[1]) -->output:Jack
print(corp[10]) -->output:360

http://www.ppmy.cn/news/1544932.html

相关文章

system generator结合高版本matlab的使用

system generator 使用的时候需要结合matlab才能正确打开。2019.1Vivado可以支持2017以及以上全部版本的的matlab。所以其实如果我们电脑里有新版的matlab&#xff0c;是不需要再去退回旧版本的。 我们只需要在vivado中再进行一个配置&#xff1a; 1、在vivado安装路径下&…

2024年大湾区杯粤港澳金融数学建模B题论文首发+60种模型组合讲解+代码手把手保姆级讲解+数据分享

大湾杯B题论文已经完成更新。本次论文问题一提供四种解题方法、问题二提供五种解题方法、问题三提供三种解题方法。累计4*5*360种方案随机组合&#xff0c;方便大家降重。每种方法提供matlab、python两套实现代码。 11.2日 18:00 发布降重说明 11.3日 18:00 发布选题人数统计…

高效管理iPhone存储:苹果手机怎么删除相似照片

在使用iPhone的过程中&#xff0c;我们经常会遇到存储空间不足的问题&#xff0c;尤其是当相册中充满了大量相似照片时。这些照片不仅占用了宝贵的存储空间&#xff0c;还可能使iPhone出现运行卡顿的情况。因此&#xff0c;我们迫切需要寻找苹果手机怎么删除相似照片的方法&…

SpringBoot+Shiro权限管理

Shiro是一个强大的Java安全框架&#xff0c;提供了身份验证、授权、加密、会话管理以及与Web集成等多种安全功能。以下是对Shiro权限管理的详细总结&#xff1a; 一、Shiro权限管理的基本概念 权限管理&#xff0c;一般指根据系统设置的安全规则或者安全策略&#xff0c;用户…

PySimpleGUI和Pymysql

PySimpleGUI 库 PySimpleGUI 是一个用于简化 GUI 编程的 Python 包&#xff0c;它封装了多种底层 GUI 框架&#xff08;如 tkinter、Qt、WxPython 等&#xff09;&#xff0c;提供了简单易用的 API。PySimpleGUI 包含了大量的控件&#xff08;也称为小部件或组件&#xff09;&…

基于CentOS 7.9上安装WebLogic

基于CentOS 7.9上安装WebLogic 一&#xff0c;安装准备与环境配置 创建用户组 groupadd weblogic创建 weblogic 用户 useradd -g weblogic weblogic设置 weblogic 用户密码 passwd weblogic创建安装目录并授权 mkdir /opt/weblogic chown -R weblogic:weblogic /opt/weblogic切…

Matlab车牌识别课程设计报告模板(附源代码)

目 录 一&#xff0e;课程设计目的……………………………………………3 二&#xff0e;设计原理…………………………………………………3 三&#xff0e;详细设计步骤……………………………………………3 四. 设计结果及分析…………………………………………18 五. …

【牛客刷题记录】【JAVA】栈

(1) 用两个栈实现队列 链接 很简单&#xff0c;如果有元素进入队列&#xff0c;则将其进入stack1。如果要出队列&#xff0c;那么就需要判断stack2的情况。人与法国stack2为空&#xff0c;则直接把stack1的元素全放进stack2&#xff08;相当于顺序反过来&#xff09;&#xff…