学习原因:

Lua 是一个小巧的脚本语言
其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,
几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。
所以Lua不适合作为开发独立应用程序的语言。
Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。


不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。
一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。


既然这么有用、那么就很有必要学习它了。。那么现在就启程吧。


学习一门语言,最终的目的就是为了使用、而最快学习一门语言最好的方法也同样,所以则专注于如何使用它:

测试环境:eclipse 自安装lua插件,可直接建立 Lua Project 在PC上直接运行看结果,以下所有例子都在Lua5.1版本运行通过,可以放心copy即运行看结果。

1、函数的使用

-- functions
 function pythagorean(a, b)   
 local c2 = a^2 + b^2   
 return sqrt(c2) 
 end 


 print(pythagorean(3,4))



运行结果: 5


在Lua中函数的定义格式为:


function 函数名(参数)
...
end --只需要在函数结束后打个end就可以了


2、循环语句


-- Loops 
 for i=1,5 do   
 print("i is now " .. i)  -- 用到了.. 这是用来连接两个字符串
 end



运行结果
i is now 1 
i is now 2 
i is now 3 
i is now 4 
i is now 5


在Lua中函数的定义格式为:


for 变量 = 参数1, 参数2, 参数3 do
循环体
end -- 变量将以参数3为步长, 由参数1变化到参数2


3、条件分支语句

-- Loops and conditionals 
   for i=1,5 do
     print("i is now " .. i)
     if i < 2 then
       print("small")
     elseif i < 4 then
       print("medium")
     else
       print("big")
     end
   end



运行结果
i is now 1 
small 
i is now 2 
medium 
i is now 3 
medium 
i is now 4 
big 
i is now 5 
big


if else用法比较简单, 类似于C语言, 不过此处需要注意的是整个if只需要一个end


5、lua数据结构


Lua语言只有一种基本数据结构, 那就是table, 所有其他数据结构如数组,类等都可以由table实现


-- Arrays
 myData = {}
 myData[0] = "foo"
 myData[1] = 42


 -- Hash tables
 myData["bar"] = "baz"


 -- Iterate through the structure
 for key, value in pairs(myData) do
   print(key .. "=" .. value)
 end




输出结果
0=foo 
1=42 
bar=baz


Table的嵌套


-- Table ‘constructor’
   myPolygon = {
     color="blue",
     thickness=2,
     npoints=4;
     -- 这其实就是一个小table, 定义在了大table之内, 小table的 table名省略了
     {x=0,   y=0},
     {x=-10, y=0},
     {x=-5,  y=4},
     {x=0,   y=4}
   }


   -- Print the color
   print(myPolygon["color"])


   -- Print it again using dot notation
   print(myPolygon.color)


   -- The points are accessible
   -- in myPolygon[1] to myPolygon[4]


   -- Print the second point’s x coordinate
   print(myPolygon[2].x)


  
输出结果
blue
blue
-10


6、函数的调用


a、不定参数

-- Functions can take a variable number of arguments.
 function funky_print (...)
   for i=1, arg.n do
     print("FuNkY: " .. arg[i])
   end
 end


 funky_print("one", "two")




输出结果
FuNkY: one
FuNkY: two


* 如果以...为参数, 则表示参数的数量不定.
* 参数将会自动存储到一个叫arg的table中.
* arg.n中存放参数的个数. arg[]加下标就可以遍历所有的参数.




b、以table做为参数

-- Functions with table parameters
 function print_contents(t)
   for k,v in pairs(t) do -- for k,v in t do 这个语句是对table中的所有值遍历, k中存放名称, v中存放值
     print(k .. "=" .. v) 
   end
 end


 print_contents{x=10, y=20}




输出结果
y=20
x=10