2.Types and Values
Lua是动态类型语言,变量不要类型定义.Lua中有8个基本类型:nil, boolean, number, string, userdata, function, thread, and table.
print(type("Hello world")) --> string
print(type(10.4*3)) --> number
print(type(print)) --> function
print(type(type)) --> function
print(type(true)) --> boolean
print(type(nil)) --> nil
print(type(type(X))) --> string
变量没有预定义的类型,每一个变量都可能包含任一种类型的值.
print(type(a)) --> nil (`a' is not initialized)
a = 10
print(type(a)) --> number
a = "a string!!"
print(type(a)) --> string
a = print -- yes, this is valid!
a(type(a)) --> function
注意上面最后两行,我们能够使用function像使用其他值相同使用.一般情况下同一变量代表不同类型的值会造成混乱,最好不要用,特别情况下能够带来便利,比如nil.
2.1 nil:Lua中特别的类型,给全局变量负nil能够删除该变量.
2.2 booleans:两个取值false和true.但要注意Lua中任何的值都能够作为条件.在控制结构的条件中除了false和nil为假,其他值都为真.所以Lua认为0和空串都是真.
2.3 numbers:表示实数,Lua中没有整数.一般有个错误的看法CPU运算符点数比整数慢.事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000).Lua的numbers能够处理任何长整数不用担心误差.您也能够在编译Lua的时候使用长整型或单精度符点型代替numbers.数字常量的例子:
4 0.4 4.57e-3 0.3e12 5e 20
2.4 lua 是8位字节,所以字符串能够包含任何数值字符,包括嵌入的0。 这意味着您能够存储任意的2进制数据在一个字符串里.Lua中字符串是不能够修改的,您能够创建一个新的变量存放您要的字符串,如下:
a = "one string"
b = string.gsub(a, "one", "another") -- change string parts
print(a) --> one string
print(b) --> another string
string和其他对象相同,Lua自动进行内存分配和释放,一个string能够只包含一个字母也能够包含一本书,Lua能够高效的处理长字符串,1M的string在Lua中是很常见的.
能够使用单引号或双引号表示字符串
a = "a line"
b = 'another line'
为了风格统一,最好使用一种,除非两种引号嵌套情况.对于字符串中含有引号的情况还能够使用转义符\来表示.Lua中的转义序列有:
\a bell
\b back space
\f form feed
\n newline
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\" double quote
\' single quote
\[ left square bracket
\] right square bracket
例子:
> print("one line\nnext line\n\"in quotes\", 'in quotes'")
one line
next line
"in quotes", 'in quotes'
> print('a backslash inside quotes: \'\\\'')
a backslash inside quotes: '\'
> print("a simpler way: '\\'")
a simpler way: '\'
还能够在字符串中使用\ddd(ddd为三位十进制数字)方式表示字母.
"alo\n123\"" 和 '\97lo\10\04923"'是相同的
还能够使用[[...]]表示字符串.这种形式的字符串能够包含多行,能够嵌套,不会解释转义序列,假如第一个字符是换行符会被自动忽略掉.这种形式的字符串用来包含一段代码是很方便的.
page = [[
<HTML>
<HEAD>
<TITLE>An HTML Page</TITLE>
</HEAD>
<BODY>
<A HREF="Luahttp://www.lua.org">Lua</A>
[[a text between double brackets]]
</BODY>
</HTML>
]]

io.write(page)
运行时,Lua会在string和numbers之间自动进行类型转换,当一个字符串使用算术操作符时,string会被转成数字.
print("10" 1) --> 11
print("10 1") --> 10 1
print("-5.3e - 10"*"2") --> -1.06e-09
print("hello" 1) -- ERROR (cannot convert "hello")
反过来,当Lua期望一个string而碰到数字时,会将数字转成string .
print(10 .. 20) --> 1020
..在Lua中是字符串连接符,当在一个数字后面写..时必须加上空格防止被解释错.
尽管字符串和数字能够自动转换,两者是不同的,像 10 == "10"这样的比较永远都是错的.假如需要显式将string转成数字能够使用函数tonumber(),假如string不是正确的数字该函数返回nil.
line = io.read() -- read a line
n = tonumber(line) -- try to convert it to a number
if n == nil then
error(line .. " is not a valid number")
else
print(n*2)
end
反之,能够调用tostring()将数字转成字符串,这种转换一直有效:
print(tostring(10) == "10") --> true
print(10 .. "" == "10") --> true
2.5 tables
Lua的tables实现了关联数组,关联数组指不但能够通过数字检索数据,还能够通过别的类型的值检索数据.Lua中除了nil外的类型都能够作为tables的索引下标.tables是Lua主要的也是唯一的数据结构,我们能够通过他实现传统数组, 符号表, 集合, 记录(pascal), 队列, 连同其他的数据结构.Lua的包也是使用tables来描述的,io.read意味着调用io包中的read函数,对Lua而言意味着使用字符串read作为key访问io表.
Lua中tables不是变量也不是值而是对象.您能够把tables当作自动分配的对象,程式中只需要操纵表的引用(指针)即可.Lua中无需声明表,使用最简单的{}表达式语句即可创建表.
a = {} -- create a table and store its reference in `a'
k = "x"
a[k] = 10 -- new entry, with key="x" and value=10
a[20] = "great" -- new entry, with key=20 and value="great"

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!