今天就跟大家聊聊有关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") hello world > x="\65\66\67\0" > x ABC
使用[[ ]]
表示多行字符串
> print([[ >> good >> or >> bad? >> ]]) good or bad?
如果将一个变量赋值为nil
,变量将被垃圾回收, 垃圾回收机制是自动的,通常不需要手动进行垃圾回收,有一个 collectgarbage()
的函数。
false
和nil
是lua唯二的falsy
值,这意味着 -1
这种在PHP中为false的值在Lua是真值。
> a = (1>2) and 1 or 2 --等同于其他语言的三元运行符 a= (1>2) ? 1 : 2 > a 2 > not a false > not not a true
> x,y=42,43 > x,y 42 43 > x,y,z=1,2 -- 不赋值的变量为nil > x,y,z 1 2 nil
> t={} > t.abc=33 > t.cde=44 > t table: 0x7ffd93f0df30 > t.fgh nil > t.abc 33
获取一个未定义的元素,会返回nil
,但是尝试获取一个未定义的元素下的属性,会抛出一个错误
> t.fgh.xyz stdin: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.a 1
#
取数组长度,也可以取字符串的升序,但对hash类型的table长度似乎不行,会返回0 ,怎么取?(@todo)
> =#t1 3
table
变量类型可以是任何lua支持的类型,甚至可以是函数,比如:
> t={x=print} > t.x('hello') hello
如果想要指定non-identifiers(非标志符?)
作为Table
的key
,需要用[]
表示
> t2={[34]=123,[true]=321} > t2[34] 123 > t2[true] 321
< > <= >= == ~=
所有这些操作符产生的结果都是true或者false
'=='检查是否相等,'~='检查是否不等
。这两个操作符可以作用于任意的两个值。如果要比较的两个值是不同的类型,那么Lua认为它们是不等的。否则,Lua根据它们的类型来比较它们是否相等。特例,nil只等于它本身
。
Lua根据引用来比较table, userdata, function,也就是说,只有二者是同一个对象的时候,它们才相等。例如:
a = {}; a.x = 1; a.y = 0 b = {}; b.x = 1; b.y = 0 c = a
执行下上面的代码,你可以得到, a == c
, 但是 a ~= b
闭包是指一个引用函数外定义的变量的函数,而且这个变量不是Gobal
的。
dofile('fn.lua') --引入一个文件
如果调用时参数不够,缺失的参数会赋值为 nil
如:
function fn(name1,name2,name3) print(name1,name2,name3) return 0 end fn('a','b')
打印 a b nil
如果调用参数多于定义参数,多余的参数会被丢弃。
对返回值的处理也是类似:
function fn(name1,name2,name3) -- print(name1,name2,name3) return 1,2 end x,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 end end a1 = adder(1) a100 = adder(100) print(a1(3)) print(a100(3))
结果:
4 103
Chunk
lua执行的每一块语句,比如一个文件,一行代码,一个函数都可以理解为一个chunk。
如果dofile
引入一个文件chunk.lua
,内容如下
local x = 123 y=456 return 789
结果:
> dofile('chunk.lua') 789 > =y 456 > =x nil
在交互模式下,每一条可执行的语句是一个chunk
,一个local
的变量在下一个chunk
中不可见, 如:
> local x=3 > x nil -- 不可见
除非使用 ;
写在同一个chunk
。
> local y=4; print(4) 4
lua 有两种注释方式
print("hello comment") -- 单行注释 function hello() print("hello comment") --[[ 这是 多行 注释 ]] end
//@to-be-continue
看完上述内容,你们对Lua有哪几种变量类型有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。