lua有8中基本类型,string(字符串),number(数字),nil(空),userdata(自定义类型),table(表),boolean(布尔),thread(线程),function(函数)。
lua的注释
单行注释:--被注释的内容;
多行注释:--[["被注释的内容"]];
重点讲解
string
lua的字符串是一个不可变的值,不能像C语言中去改变一个字符串的值,比如修改某个字符值。而是应该根据修改要求来创建一个新的字符串。例如 a = “a string”,b=string.gsub(a,"a","another"),b = "another string"。lua的字符串是自动内存管理机制所管理的对象,使用者无须担心内存分配和释放。lua中也存在转义字符\。
还可以用一对匹配的双方括号来界定一个字符串,这种形式的字符串可以延伸多行,lua不会解释其中的转义字符。此外,如果第一个字符是换行字符,那么lua会忽略它。例如:
str = [[
<html>
<head>
<title>My Story</title>
</head>
<body>
<a href="www.baidu.com">learning lua makes me happy!</a>
</body>
</html>
]]
lua还提供了运行时数字和字符串的自动转换。例如:
分别输出11,10 + 1,20。
lua中..是起到连接字符串的作用。例如print(10 .. 20) 输出1020
将数字字符串转化为数字,可以用tonumber,如果字符串不是数字字符串,那么tonumber会返回nil
将数字转换为字符串,可以用tostring。
获取字符串长度,可以用#,例如print(#"host"),则会输出4。
number
number用于表示实数,lua没有整数类型。
nil
nil是一种类型,它只有一个值nil。它的主要功能是用于区别其他的值。nil表示一个无用的值,不可使用,这一点上,有点像C/C++中的NULL。
table
table表示关联数组,是一种具有特殊索引方式的数组。它的索引可以是正数、字符串和其他类型的值,此外,table并没有固定的大小,它可以动态添加任意数量的元素。操作方式让我联想到了STL中的vector。可以将table想象成一个动态分配的对象,程序仅拥有一个对它们的引用,lua不会暗自产生table的副本或者新的table对象。table的创建是通过结果表达式{}完成的。
访问value是table有两种形式,一种是通过索引下标,另外一种是.调用。例如:
a = {}
x = "y"
a[x] = 10
print(a[x]),输出为10。此处要注意print(a.x)与print(a.y)的区别,print(a.x)相当于print(a["x"])。
print(a.y),输出也为10。print(a,y)相当于print(a["y"])。
boolean
boolean类型有两个值,true和false。在lua中,把false和nil视为假,其他的视为真。就算是0和空字符也是真。
function
lua既可以调用自身lua编写的函数,也可以调用C编写的函数。lua所有的标准库都是用C语言写的。
Lua中的索引值一般从1起。