码迷,mamicode.com
首页 > 其他好文 > 详细

lua学习--系列1

时间:2015-04-21 20:53:39      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

学习原因:

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


在线电子书籍: http://book.luaer.cn/


下一节将开始讲C与lua相互调用的。


lua学习--系列1

标签:

原文地址:http://blog.csdn.net/andyhuabing/article/details/45174049

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!