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表示执行的独立线路,用于执行协同程序
tableLua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

我们定义一个变量之后,可以通过lua的一个函数来获得它的类型:type(value)
type会返回一个字符串,然后用print输出就能看到它的数据类型,包括方法function也可以识别出类型

a=100
print(type(a))

——————————————*********************************************************—————————————
——————————————*********************************************************—————————————
——————————————*********************************************************—————————————

nil

nil: 在Lua语句中,没有声明一个变量,就直接去使用这个变量的话,这个变量的值就是nil,也就是null空,nil在if判断语句里面表示false的意思,除了nil之外其他数值都被当成true。

a=100
if(a)
then
	print("a有值,这个判断会当成true执行")
end

if(nil)
then
	print("nil为false,所以不执行这里")
else
	print("nil为false,所以执行这里")
end

所有没有申明的值,都和nil的效果是一样的
最后我们还可以通过nil来销毁变量,释放内存

a=100
print(a)
a=nil

在a被使用过后,不在使用了,就可以通过=nil来把a销毁掉,然后释放掉这一块的内存

boolean

boolean有两个值,true和false,要注意上面的nil,也被当做false使用,没有定义的变量也被当做false。其他类型的变量被当做true使用,数字0也是true

number

number就是数字类型,包括整数、小数、科学计数法

string

string 定义的时候,可以使用双引号和单引号,还可以使用 [[]] 两个中括号来声明一堆字符串

stra="liuchang"
strb='fluency'
str=[[
这里是一堆字符串
https://blog.youkuaiyun.com/Liu_ChangC
]]
print(stra..strb..str)

如果使用 “+” lua会把两个字符串进行加法运算,即使你是使用了引号,也会自动转成number类型进行运算,所以字符串的拼接,使用 “..”

a=1
b="2"
print(a..b)--结果为12
print(a+b)--结果为3

使用 “#” 来计算字符串的长度,注意一点,我们的汉字一个字占两个字节,所以在我们退格的时候,一个汉字需要删两次,注意一下就好

print(#"刘畅")--结果为4
print(#"fluency")--结果为7

table

table 的创建是通过"构造表达式"来完成,最简单构造表达式是{}

table比较像C#的字典,是通过key和value来存储数据的,但是要比字典更强大一些,里面可以放的各种类型的值是不固定的,而且key可以使string也可以是number

tab={}--创建了一个空表
tab1={key1=100,key2="test",222,"aaa",true}--初始化一个表

--获取table值的方式
print(tab1.key1)--100
print(tab1["key1"])--222
print(tab1[1])--222
print(tab1[2])--aaa
print(tab[3])--true

没有指定key的值,会给一个默认key,从1开始自动增长

修改数据
更改值的时候,只需要重新赋值覆盖就可以了

--接着上面的表
tab1.key1="str"
print(tab1.key1)--结果为str,覆盖时是可以改变值的类型

添加数据

--接着上面的表
tab1.key3="newValue"
tab1["key4"]="newValue2"
tab1[4]=100

删除值
删除时将值 =nil

--接着上面的表
tab1.key1=nil
tab1[1]=nil
--[[注意,这里删除了222这个值之后,后面的值不会自动跟上来
也就是说,你调用tab1[1]得到的还是nil,不是"aaa",和C#的List是不一样的--]]

function的用法我下一篇总结吧

<think>首先,用户的问题是:“我想了解Lua中空字符串''的数据类型请问lua空字符串数据类型”。这翻译成英文是:“Iwanttounderstandthedatatypeofanemptystring''inLua.WhatisthedatatypeofanemptystringinLua?”在Lua中,空字符串''的数据类型是什么?根据Lua的文档,字符串在Lua中是一个基本数据类型,具体是string类型。Lua有几种基本数据类型:nil、boolean、number、string、function、userdata、thread和table。字符串是其中之一。空字符串''仍然是一个字符串,所以它的数据类型是string。这与非空字符串一样,比如"hello"也是string类型。现在,回顾系统指令:-所有行内数学表达式必须使用$...$格式,但这里没有数学表达式,所以可能不需要。-独立公式必须使用$$...$$格式并单独成段,但同样,没有数学公式。-LaTeX语法正确:不适用。-使用中文回答:必须用中文回复。-生成相关问题:在回答后,需要生成相关问题。-回答中引用的段落末尾自然地添加引用标识:我有一些引用,需要引用它们。引用内容是:-引用[1]:关于Lua字符串创建,特别是luaS_newlstr函数,处理短字符串和长字符串。-引用[2]:Lua字符串对象的结构TString,区分短字符串和长字符串。-引用[3]:Lua字符串操作方法。-引用[4]:关于字符串拼接,数字和字符串自动转换。用户的问题是关于空字符串的数据类型,不是关于创建、结构或操作。所以,我需要基于一般知识回答,但可以引用这些来支持。关键点:-在Lua中,所有字符串,包括空字符串,都是string类型。-引用[1]和[2]提到,Lua内部处理字符串时区分短字符串和长字符串,但对于用户来说,类型是相同的。-空字符串''可以被视为短字符串,因为长度是0,小于LUAI_MAXSHORTLEN(通常是40或类似值)。所以,回答应该简洁:空字符串的数据类型是string。然后,生成相关问题。回答结构:清晰、逐步解决问题。大纲回答:1.直接回答问题:Lua中空字符串''的数据类型是string。2.解释原因:所有字符串在Lua中都是string类型,无论是否为空。3.引用支持:如果有相关引用,可以添加。例如,引用[2]描述TString结构,但类型是统一的。4.生成相关问题。最后,添加引用标识。相关问题建议:1.Lua中如何检查一个值是否为字符串类型?2.空字符串在Lua中有什么特殊行为?3.Lua字符串的内部表示是什么?(引用[2]相关)4.如何操作空字符串?(引用[3]相关)确保回答真实可靠:基于Lua知识。</think>### Lua中空字符串''的数据类型Lua中,空字符串`''`的数据类型是**string**(字符串类型)。这与非空字符串(如`"hello"`)的数据类型相同,因为Lua将所有字符串统一视为基本数据类型之一。以下我将逐步解释原因和相关细节,确保回答基于Lua官方文档和内部机制。 #### 步骤1: Lua基本数据类型 Lua有8种基本数据类型:nil、boolean、number、string、function、userdata、thread和table[^3]。字符串类型(string)用于表示文本数据,包括空字符串`''`。无论字符串内容如何(空或非空),其类型在用户层面都是`string`。例如: ```lua print(type('')) -- 输出 "string" print(type("hello")) -- 输出 "string" ``` #### 步骤2: 空字符串的内部处理 尽管用户看到的类型是统一的`string`,Lua在内部实现中会根据字符串长度区分短字符串和长字符串(例如,长度小于`LUAI_MAXSHORTLEN`(通常为40)的视为短字符串)。空字符串`''`的长度为0,因此被归类为短字符串: - 短字符串由`internshrstr`函数处理,并缓存在全局哈希表中以提高效率[^1]。 - 长字符串则通过`luaS_createlngstrobj`创建,但空字符串不涉及此路径[^1]。 内部结构上,所有字符串都表示为`TString`对象,其中包含公共头(CommonHeader)、哈希值(hash)、长度信息(如`shrlen`或`lnglen`),以及额外标志(extra)[^2]。对于空字符串: - `shrlen`为0(表示短字符串长度)。 - `extra`字段可能用于标记保留字或哈希计算状态,但这不影响用户层面的类型判断[^2]。 #### 步骤3: 为什么类型一致? Lua的设计原则是简化用户交互:字符串类型不因内容变化而改变。空字符串`''`在操作上与非空字符串行为一致: - 它支持所有字符串方法,如`string.upper()`或`string.lower()`,尽管对空字符串调用这些方法会返回空字符串本身[^3]。 - 在拼接操作中,Lua自动处理类型转换,例如`"" .. 123`会输出`"123"`,因为数字被隐式转为字符串[^4]。 总之,空字符串`''`的数据类型是`string`,这是Lua语言规范的一部分,确保代码的一致性和易用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪小心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值