lua实战(2)

news/2024/7/23 23:53:51 标签: lua, 开发语言

目录

    • 值和类型
    • 子类型
    • 类型字符串
    • type (v)

值和类型

Lua是一种动态类型语言。这意味着变量没有类型;只有价值观才有意义。该语言中没有类型定义。所有值都有自己的类型。

Lua中的所有值都是一等值。这意味着所有的值都可以存储在变量中,作为参数传递给其他函数,并作为结果返回。

Lua中有八种基本类型:nil、boolean、number、string、function、userdata、thread和table。
类型nil只有一个值nil,它的主要属性是不同于任何其他值;它通常表示缺乏有用的价值。布尔类型有两个值,false和true。nil和false都使条件为假;它们统称为假值。任何其他值都使条件为真。尽管它的名字是false,但false经常被用作nil的替代品,关键的区别是false的行为就像表中的常规值,而表中的nil表示不存在的键。

类型number表示整数和实数(浮点数),使用两个子类型:integer和float。标准Lua使用64位整数和双精度(64位)浮点数,但您也可以编译Lua,使其使用32位整数和/或单精度(32位)浮点数。整数和浮点数的32位选项对于小型机器和嵌入式系统特别有吸引力。(参见luaconf.h文件中的LUA_32BITS宏)

除非另有说明,否则根据双补数算术的通常规则,在操作整数值时将出现溢出。(换句话说,实际结果是与数学结果模2n相等的唯一可表示整数,其中n是整数类型的位数。)

子类型

Lua对每个子类型的使用有明确的规则,但它也会根据需要在它们之间自动转换。因此,程序员可以选择忽略整数和浮点数之间的差异,或者完全控制每个数字的表示。

类型字符串

类型字符串表示不可变的字节序列。Lua是8位干净的:字符串可以包含任何8位值,包括嵌入的零(‘\0’)。Lua也是编码不可知论者;它对字符串的内容不做任何假设。Lua中任何字符串的长度必须适合Lua整数。

Lua可以调用(和操作)用Lua编写的函数和用C编写的函数。两者都由类型函数表示。

提供userdata类型以允许将任意C数据存储在Lua变量中。userdata值表示一块原始内存。有两种类型的userdata: full userdata,它是一个由Lua管理的内存块的对象;light userdata,它只是一个C指针值。Userdata在Lua中没有预定义的操作,除了赋值和身份测试。通过使用元表,程序员可以为完整的userdata值定义操作(参见§2.4)。用户数据值不能在Lua中创建或修改,只能通过C API。这保证了主程序和C库拥有的数据的完整性。

thread类型代表独立的执行线程,它被用来实现协程。Lua线程与操作系统线程无关。Lua支持所有系统上的协程,即使是那些本身不支持线程的系统。

类型表实现了关联数组,也就是说,数组不仅可以将数字作为索引,还可以将除nil和NaN以外的任何Lua值作为索引。(Not a Number是IEEE 754标准使用的特殊浮点值,用于表示未定义的数字结果,例如0/0。)表可以是异构的;也就是说,它们可以包含所有类型的值(nil除外)。任何与值nil相关联的键都不被认为是表的一部分。相反,任何不属于表的键都有一个关联值nil。

表是Lua中唯一的数据结构机制;它们可以用来表示普通的数组、列表、符号表、集合、记录、图形、树等。为了表示记录,Lua使用字段名作为索引。该语言通过提供a.name作为[“name”]的语法糖来支持这种表示。有几种方便的方法可以在Lua中创建表。

与索引一样,表字段的值可以是任何类型。特别是,由于函数是一等值,表字段可以包含函数。因此表也可以携带方法

表的索引遵循语言中原始相等的定义。
表达式a[i]和a[j]表示相同的表元素,当且仅当i和j是原始相等的(即在没有元方法的情况下相等)。特别是,带有整数值的浮点数等于它们各自的整数(例如,1.0 == 1)。为了避免歧义,任何用作键的等于整数的浮点数都被转换为该整数。例如,如果您写入a[2.0] = true,则插入到表中的实际键将是整数2。

表、函数、线程和(完整的)userdata值都是对象:变量实际上不包含这些值,只包含对它们的引用。
赋值、参数传递和函数返回总是对这些值的引用进行操作;这些操作并不意味着任何类型的复制。

type (v)

返回其唯一参数的类型,编码为字符串。这个函数可能的结果是“nil”(字符串,而不是值nil)、“number”、“string”、“boolean”、“table”、“function”、“thread”和“userdata”。


http://www.niftyadmin.cn/n/311916.html

相关文章

Day02剑指offer-链表

视频地址:帅地玩编程 剑指 Offer 06. 从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 概念 .val()方法 .val()无参数,获取匹配的元素集合中第一个元素的当前值.val( value…

IS200TREGH1BEC直流并励电动机的启动

​ IS200TREGH1BEC​​​​​​直流并励电动机的启动 要启动机器,电机在零速时产生的扭矩必须超过负载所需的扭矩。然后 TM − TL 将为正,d!/dt 也为正,机器加速。 通常,直流电机的电枢电阻在满载电流时会导致 1% 到 5% 的下降。…

中科院学术专用版GPT Academic项目实现

【写在最前】要完成GPT 学术优化 (GPT Academic)这个项目需要一些值得注意的地方: chatGPT账户有余额且未过期!!!有代理工具(类似Clash) 1、代码克隆 https://github.com/binary-husky/gpt_academic 根据…

程序员有什么门槛吗?我来谈谈当C++程序员的意义所在

很多小伙伴问:“我能成为程序员吗?”答案是肯定的,无论你只上过小学、初中,还是已经上了研究生。然而,重要的是要明白,就像有不同种类的工人一样,也有不同种类的程序员。有清洁工、高端技术工人…

基于java(springboot)和go-cqhttp实现QQ机器人

目录 yh-qqrobot机器人简介go-cqhttp搭建1.下载应用2.生成bat文件3. 初始化项目4. 配置5. 运行项目 yh-qqrobot搭建搭建后端1. 导入sql文件2. 配置文件3. 导入到idea 搭建前端 yh-qqrobot机器人简介 yh-qqrobot是一个基于若依框和go-cqhttp集成的系统,一开始我只是揣…

shell补充命令

目录 排序sort命令 语法格式: 常用选项: 去重uniq命令 替换tr命令 替换字符 删除​编辑 压缩​编辑 压缩替换​编辑 删除空行 截取cut命令 拆分split命令 合并paste命令​ eval命令 排序sort命令 以行为单位对文件内容进行排序,也可以根据不同的数据类型…

三极管知识大全

一、三极管的使用 一般可以当做开关管来使用,也可以利用三极管的放大特性,来搭建恒流源,恒压源等等, 三极管当做开关管来使用的话,三极管输出的是高、低、高、低的方波信号 BUCK电源的开关频率在65KHz,也…

LinuxFoundation

LinuxFoundation 一. 常用命令1.1 解压 tar1.2 关闭进程 kill1.2.1 根据进程名1.2.2 根据pid1.3 防火墙 ufw1.3.1 开启防火墙1.3.2 关闭防火墙1.3.3 查看防火墙状态1.4 查看端口是否被占用 lsof1.5 界面切换 systemctl1.5.1 切换图形界面1.5.2 切换命令界面1.6 查询服务 ps1.7 …