1.type函数总是返回一个字符串,因此
print(type(type(x)))
的输出结果是string
2.函数是作为"第一类值"来看待的,可以像操作其他值一样来操作一个函数值
3.一个全局变量在第一次赋值前的默认值就是nil
4.Lua将值false和nil视为"假",而将除此之外的其它值视为"真"。例如数字零和空字符串都视为"真"
5.科学计数法的表示形式,例如:
0.3e12
6.Lua的字符串是不可变的值。不能像在C语言中那样直接修改字符串的某个字符,而是应该根据修改要求来创建一个新的字符串
7.字面字符串需要以一对匹配的单引号或双引号来界定。如果字符串本身包含引号,可以使用反斜杠(\)对引号进行转义
8.可以通过字符来指定字符串中的字符,数值以转义序列 "\<add>"给出。例如
"alo\n"
与
"\97lo\10"
是相同的。因为'a'的ASCII编码是97,"换行"的编码是10
9.可以用一对匹配的双方括号("[["和"]]")来界定一个字母字符串。以这种形式书写的字符串可以延伸多行,Lua不会解释其中的转义序列。如果字符串的第一个字符是一个换行字符,那么Lua会忽略它
10.如果字符串中包含"]]"或者包含已经被注释掉的代码,为了应对这种情况,需要在两个左方括号间加上任意数量的等号,如[===[。字面字符串只有在遇到了一个内嵌有相同数 量等号的双右方括号时才会结束(就前例而言,即]===])。这套机制同样适用于注释。例如以"--[[=["开始的一个块注释将延伸至"]=]"结束,如此可用于注释那些已经包含了注释块的代码
11.Lua提供了运行时的数字与字符串的自动转换。在一个字符串上应用算术操作时,Lua会尝试将这个字符串转换成一个数字,例如:
print("10"+1) -->11
在Lua期待一个字符串而得到一个数字时,它会将数字转换成字符串,例如
print(10 .. 20) -->1020
".."是字符串连接操作符。当直接在一个数字后面输入它的时候,必须要用一个空格来分隔它们。不然,Lua会将第一个点理解为一个小数点。而第二的数字前有无空格皆可
12.若要将一个数字转换成字符串可以调用函数tostring,或者将该数字与一个空字符串相连接,例如
print(tostring(10) == "10") -->true
print(10 .. "" == "10") -->true
13.可以在字符串前放置操作符"#"来获得该字符串的长度
14.table是Lua中仅有的数据结构机制
15.table永远是"匿名的",一个持有table的变量与table自身之间没有固定的关联性。为了便于理解,见下例:
a = {}
a["x"] = 10
b = a
print(b["x"]) -->10
b["x"] = 20
print(a["x"]) -->20
a和b只是对于table的引用,当一个程序再也没有对一个table的引用时,Lua最终会删除该table
16.将nil赋予table的某个元素可以删除该元素
17.a.x = 10
等同于
a["x"] = 10
18.Lua数组通常以1作为索引的起始值
19.长度操作符"#"用于返回一个数组的最后一个索引值(或作为其大小),例如:
for i = 1,#a do
print(a[i])
end
打印所有的行
print(a[#a])
打印数组a的最后一个值
a = {}
for i = 1,10 do
a[#a+1] = io.read()
end
读取一个文件的前10行
20.函数table.maxn将返回一个table的最大正索引数,即数组数字下表的最大值
21.索引table时,"+1","01"和"1"代表了不同的条目
22.函数作为第一类值来看待。这表示函数可以存储在变量中,可以通过参数传递给其他函数,还可以作为其他函数的返回值
23.table也可以用table作为其索引,例如:
a[{1,2,3}] = 3