类型与值 
Lua8种基本类型 
nil类型(空)、boolean(布尔类型)、number(数字类型)、string(字符串)、userdata(自定义)、function(函数)、thread(线程)和table(表)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 print (type ("Hello World !" ))  print (type (10 *3 ))             print (type (print ))            print (type (type ))             print (type (true ))             print (type (nil ))              print (type (type (X)))          print (type (a))  a = 10  print (type (a))  a = "string"     print (type (a))  a = print         a(type (a))       
 
 
nil(空) 
nil  是一种类型,只有一个 nil 值 ,它的主要能工是用来区别其他任何值。用于表示无效值。
boolean(布尔) 
Lua将false和nil值视为假,将除此之外的值视为真。
number(数字) 
number类型表示实数。lua中所有的数字可以表示任何一个32位的整数,而不会产生四舍五入的错误。并且现在有的cpu浮点数运算可能更快。 
也可以通过重新编译lua,也可以用其他类型表示数字。具体做法详见发行版中的luaconf.h
string(字符串) 
lua中的字符串通常表示一个字符序列。其采用8位编码,lua字符串中的字符可以具有任何数字值编码,包括数值0,它可以讲任意二进制数据存储到一个字符串中。 
lua的字符串是不可变值,修改字符需要创建一个新的字符串。
一对匹配引号(""或’’)界定字符串 
一对匹配双方括号界定字符串 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33  function  my_string ()      print ("用双引号界定打印字符串" )     print ("one line\n\"in quotes \",'in quotes'" )      print ("用单引号界定打印字符串" )     print ('a backslash inside quotes : \'\\\'' )        print ("用ascii码打印字符串" )     print ("正常字符" )     print ("alo\n123\"" )     print ("ascii码字符" )     print ('\97lo\10\04923"' )      print ("用双方括号界定打印字符串" )          page = [==[      --[[     a=b[c[i]]     --]]     ]==]     page1 = [[      <html>     <body>     <a href="http://www.lua.org">Lua</a>     </body>     </html>     ]]     print (page)     print (page1) end my_string() 
 
数字与字符串的自动转换 
 
1 2 3 4 5 6 print ("10"  + 1 ) print ("10 + 1" ) print ("-5.3e-10" *"2" ) print (10  .. 20 ) print ("10"  .. "20" )  
 
使用tonumber将字符串转换为数字 
 
1 2 3 4 5 6 7 8 9 10 11 12 13   line = io .read ()  n = tonumber (line)   if  n == nil  then     error (line .. "is not a vaild number" ) else     print (n*2 ) end s = tostring (n)  print (s == "10" ) print (10  .. ""  == "10" ) 
 
获取字符串的长度 
 
1 2 3 a = "hello world"  print (#a)   print (#"good\0bye" )  
 
table(表) 
table类型实现了关联数组,它具有一种特殊的索引方式,可以使用字符串、整数等来索引(除了nil)。 
table是一个对象,是一种动态分配的对象。 
lua中通过table表示普通数组、符号表、集合、记录、队列和其他数据结构。 
lua通过table表示模块、包和对象。比如io.read(),表示使用字符串read作为key来索引table类型的io。
table的创建是由动态表达式完成的 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 a = {}    k = "color"    a[k] = "green"   print (a[k])    a[9 ] = "great"   print (a[9 ])   a["num" ] = 10    print (a["num" ]) k = 9    print (a[k]) a["num" ] = a["num" ]+1   print (a["num" ])
 
table永远是匿名的,table变量和自身没有固定联系 
 
1 2 3 4 5 6 7 8 a = {} a["x" ] = 10   b = a    print (b["x" ]) b["x" ] = 20    print (a["x" ])a = nil   b = nil   
 
table会自增长 
 
1 2 3 4 5 6 7 8 9 10 11 a = {} for  i=1 ,1000  do     a[i] = i*2  end print (a[9 ])  a["x" ] = 10    print (a["x" ]) print (a["y" ]) 
 
a.x和a[x]的区别 
a.x等同于a[“x”],a.x中的x是table中的key(通常这个key是固定不变的),a[x]中的x是变量,它可以指定一个key。 
table的索引 
table中的索引以1作为索引起始值。长度操作符"#“返回的是最后一个索引值。 
长度操作符”#"用来处理没有空隙的数组。table.maxn用来处理有空隙的数组。 
 
1 2 3 4 5 6 7 8 9 a = {} a[1000 ] = 1   print (table .maxn (a)) b = {} for  i=1 ,10  do       b[i]=i*2  end print (#b)   
 
key值问题 
table中任何类型都可以用来索引,如果是数字0和字符"0"作索引,它们不是一个索引,会被分为两个。遇到这样的,我们可以用显示转换。 
 
1 2 3 4 5 6 7 8 9 10 11 i = 10  ; j = "10"  ; k = "+10"  a = {} a[i] = "one value"  a[j] = "another value"  a[k] = "yet another value"  print (a[i])print (a[j])print (a[tonumber (j)]) print (a[tonumber (k)]) 
 
function(函数) 
函数可以存储到变量中,可以通过参数传递给其他函数,可以作为其他函数的返回值。 
lua可以调用自身lua语言写的函数,也可以调用 c语言写的函数。
userdata(自定义类型)和thread(线程) 
userdata类型可以将任意c语言数据存储到lua变量中。标准的I/O库就用userdata表示文件。