Lua 笔记--类型与值

         Lua是一种动态类型的语言。

        在Lua中有8种基础类型:nil(空)、boolean(布尔)、number(数字)、string(字符串)、userdata(自定义类型)、function(函数)、thread(线程)和table(表)。

print(type("Hello World")        -->string
print(type(10.2*3))              -->number
print(type(print))               -->function
print(type(type))                -->function
print(type(true))                -->boolean
print(type(nil))                 -->nil
print(type(type(x)))             -->string,与x无关,因为type函数总是返回一个字符串
print(type(a))                   -->nil,因为a尚未初始化

a = print                        -->这是合法的!
a(type(a))                       -->function

        Lua的字符串和其他Lua对象一样,都是自动内存管理机制所管理的对象。这表示无须担心字符串的分配和释放。

        Lua字符串中的转义序列:

\a        -->响铃
\b        -->退格
\f        -->提供表格
\n        -->换行
\r        -->回车
\t        -->水平tab
\v        -->垂直tab
\\        -->反斜杠
\"        -->双引号

        另外,还可以用一对匹配的双方括号来界定一个字母字符串,以这种形式书写的字符串可以延伸多行,Lua不会解释其中的转义序列。例如:

page = [[
...
...
]]

        Lua提供了运行时的数字与字符串的自动转换。在一个字符串上应用算术操作时,Lua会尝试将这个字符串转换成一个数字:

print("10" + 1)        -->11
print("hello" + 1)     --错误,不能转换"hello"

        在Lua中," .. "时字符串连接操作符,当直接在一个数字后面输入它的时候,必须要用一个空格来分隔它们,不然,Lua会将第一个点理解为一个小数点,可以利用这个特性将数字转换成字符串(最好不要用):

print(10 ..20)        -->1020

line = io.read()        -->读取一行
n = tonumber(line)      -->尝试将它转换为一个数字
print(tostring(10) == "10")        -->将一个数字转换成字符串

        在Lua 5.1中,可以在字符串前放置操作符”#“来获得该字符串的长度:

a = "Hello"
print(#a)        -->5
print(#"World")        -->5

        table(表)类型实现了“关联数组”,“关联数组“是一种具有特殊索引方式的数组。table没有固定大小,可以动态地添加任意数量的元素到一个table中。它可以表示普通数组、符号表(symbol table)、集合、记录、队列和其他数据结构。在Lua中,table既不是”值“,也不是”变量“,而是”对象“。

a = {}            -->创建一个table,并将它的引用存储到a
k = "x"
a[k] = 10         -->新条目,key="x",value=10
a[20] = "great"   -->新条目,key=20,value="great" 
print(a["x"])     -->10
k = 20
print(a[k])       -->"great" 
a["x"] = a["x"] + 1        -->递增条目"x"
print(a["x"])     -->11

a = {}
a["x"] = 10
b = a            -->b与a引用了同一个table
print(b["x"])    -->10    
b["x"] = 20
print(a["x"])    -->20
a = nil          -->现在只有b还在引用table
b = nil          -->再也没有对table的引用了

a.x = 10        -->等同于a["x"] = 10
print(a.x)      -->等同于print(a["x"])

        在Lua中,数组通常以1作为索引的起始值。长度操作符"#"用于返回一个数组或线性表的最后一个索引值(或为其大小),例如:

--打印所有的行
for i=1, #a do
    print(a[i])
end

        在Lua中,函数(function)是作为“第一类值”来看待的。这表示函数可以储存在变量中,可以通过参数传递给其他函数,还可以作为其他函数的返回值。

a = "Jacedy"
print("I'm " ..a)

a = 10
print("a is " ..a)


你可能感兴趣的:(Lua 笔记--类型与值)