千家信息网

Lua有哪几种变量类型

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,今天就跟大家聊聊有关Lua有哪几种变量类型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。常用命令查看版本lua -v进入交互模式(ctrl+D
千家信息网最后更新 2025年01月17日Lua有哪几种变量类型

今天就跟大家聊聊有关Lua有哪几种变量类型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

常用命令

查看版本

lua -v

进入交互模式(ctrl+D退出)

lua -i


变量类型

Lua有8种变量类型

type函数可以返回变量的类型

> a=true> type(a)boolean

tonumber 函数可以将字符串转成数字

> tonumber(33.3)33.3> tonumber('42')42> tonumber('hello')nil

Lua的字符串是immutable的,可以使用双引号或单引号。

> x="hello"> y='world'> print(x,y)hello   world> print("hello\nworld")helloworld> x="\65\66\67\0"> xABC

使用[[ ]]表示多行字符串

> print([[>> good>> or>> bad?>> ]])goodorbad?

如果将一个变量赋值为nil,变量将被垃圾回收, 垃圾回收机制是自动的,通常不需要手动进行垃圾回收,有一个 collectgarbage()的函数。

falsenil是lua唯二的falsy值,这意味着 -1 这种在PHP中为false的值在Lua是真值。

逻辑运算符

> a = (1>2) and 1 or 2 --等同于其他语言的三元运行符 a= (1>2) ? 1 : 2> a2> not afalse> not not atrue

多个变量同时赋值

> x,y=42,43> x,y42      43> x,y,z=1,2 -- 不赋值的变量为nil> x,y,z1       2       nil

Table 类型

> t={}> t.abc=33> t.cde=44> ttable: 0x7ffd93f0df30> t.fghnil> t.abc33

获取一个未定义的元素,会返回nil,但是尝试获取一个未定义的元素下的属性,会抛出一个错误

> t.fgh.xyzstdin:1: attempt to index a nil value (field 'fgh')stack traceback:        stdin:1: in main chunk        [C]: in ?>

table下的元素可以是任何值,甚至可以是函数,如:

> t.fun=print> t.fun('hello')hello


跟php的数组类型类似,table可以表示其他语言的数组和hash(字典),

注意:lua的数组并不是一个特殊的变量类型,而只是table的一种形式,并且Lua数组的索引从1开始,而非0

> t1={1,2,3}> t1[1]1> t2={a = 1, b = 2}> t2.a1

#取数组长度,也可以取字符串的升序,但对hash类型的table长度似乎不行,会返回0 ,怎么取?(@todo)

> =#t13

table 变量类型可以是任何lua支持的类型,甚至可以是函数,比如:

> t={x=print}> t.x('hello')hello

如果想要指定non-identifiers(非标志符?) 作为Tablekey ,需要用[]表示

> t2={[34]=123,[true]=321}> t2[34]123> t2[true]321

Lua操作符

< > <= >= == ~=

所有这些操作符产生的结果都是true或者false

'=='检查是否相等,'~='检查是否不等。这两个操作符可以作用于任意的两个值。如果要比较的两个值是不同的类型,那么Lua认为它们是不等的。否则,Lua根据它们的类型来比较它们是否相等。特例,nil只等于它本身

Lua根据引用来比较table, userdata, function,也就是说,只有二者是同一个对象的时候,它们才相等。例如:

a = {}; a.x = 1; a.y = 0b = {}; b.x = 1; b.y = 0c = a

执行下上面的代码,你可以得到, a == c, 但是 a ~= b

函数和闭包

闭包是指一个引用函数外定义的变量的函数,而且这个变量不是Gobal的。

dofile('fn.lua')  --引入一个文件

如果调用时参数不够,缺失的参数会赋值为 nil

如:

function fn(name1,name2,name3)     print(name1,name2,name3)    return 0endfn('a','b')

打印 a b nil

如果调用参数多于定义参数,多余的参数会被丢弃。

对返回值的处理也是类似:

function fn(name1,name2,name3)     -- print(name1,name2,name3)    return 1,2endx,y,z = fn('a','b')print (x,y,z)

打印结果

1       2       nil

匿名函数

v = function() return 0 end

本地函数 创建模块时经常会被使用。

local function hi(name) print('hi ' .. name) end


闭包

function adder(x)    return function (y)        return x + y     endenda1 = adder(1)a100 = adder(100)print(a1(3))print(a100(3))

结果:

4 103

Chunk

lua执行的每一块语句,比如一个文件,一行代码,一个函数都可以理解为一个chunk。

如果dofile引入一个文件chunk.lua,内容如下

local x = 123y=456return 789

结果:

> dofile('chunk.lua')789> =y456> =xnil

在交互模式下,每一条可执行的语句是一个chunk,一个local的变量在下一个chunk中不可见, 如:

> local x=3> xnil -- 不可见

除非使用 ; 写在同一个chunk

> local y=4; print(4)4

注释

lua 有两种注释方式

print("hello comment") -- 单行注释function hello()    print("hello comment")--[[这是多行注释]]end

//@to-be-continue

看完上述内容,你们对Lua有哪几种变量类型有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

变量 类型 函数 参数 数组 内容 字符 字符串 注释 结果 两个 元素 垃圾 操作符 文件 闭包 代码 引号 模式 语句 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 万集软件的数据库的信息 高速用什么软件开发票 科创软件开发的要求ppt 传统的数据库结构包括哪些 不安全视角下网络安全 印度软件开发平均工资 杭州满锦互联网科技有限公司 联想服务器阵列卡参数在哪看 网络安全与数据大会 出入境网络安全宣传活动简报 中国 打车软件开发 现在软件开发价格 黑魂3怎么登录游戏服务器 浦东新区专业网络技术检修 计算机网络安全绘画过程 绝地求生2怎么无法连接服务器 传感器网络软件开发 四川浪潮服务器虚拟化部署 国内服务器十大厂商 从事硬软件开发的英语 网络安全绝招 你值得拥有 安恒信息中国网络安全 数据库的主要用处 多店电商软件开发 网络安全检查情况统计表怎么填写 南京直播软件开发怎么收费 筑牢网络安全基石艺术字 古墓丽影是用哪款软件开发的 万方数据库好还是维普 服务器进pe教程视频
0