::^乔乔^::明镜台::原创空间::C#.NET2.0,C++技术BLOG
人最重要的是心境,一颗平静安稳的心才能更好的进步,保持自己的心态.成为梦想中的高手QQ群:8664695
posts - 17,comments - 32,trackbacks - 0

1、lua学习之入门(一)----环境搭建

2、lua学习之入门(二)----基础语法1

3、lua学习之入门(二)----基础语法2

4、lua学习之入门(三)----函数

      编程语言之所以叫做语言,因为它具有语言的特性,我们回忆一下学英语的过程,首先是学ABC字母,然后是单词,然后是句子,最后到文章..其实编程语言也具有这样的特性,标识符等于"字母",值和变量还有API等于"单词",语句块或函数,甚至是类等于"句子",一个程序就是一篇"文章"..今天我学习的是"句子",也就是语句块.

        在LUA里语句块是由以下几个构成的

第一:   语句组Chunks  

chunk :: =  {stat [`;´]}

这儿不允许有空的语句段,所以 
' ;; '  是非法的。 

lua 把一个 chunk 当作一个拥有不定参数的匿名函数(参见 §
2.5 . 9 )处理。正是这样,chunk 内可以定义局部变量,接收参数,并且返回值。 

chunk 可以被保存在一个文件中,也可以保存在宿主程序的一个字符串中。当一个 chunk 被执行,首先它会被预编译成虚拟机中的指令序列,然后被虚拟机解释运行这些指令。 

chunk 也可以被预编译成二进制形式;细节参考程序 luac。用源码形式提供的程序和被编译过的二进制形式的程序是可以相互替换的; Lua 会自动识别文件类型并做正确的处理。 

在手册里,只有这简短的解析,对于一个初学者,其实真是很抽象(某XX教授:手册有名字给你叫手册,用来查不是用来学的..我曰:没有其他学习资料只有手册的时候,它就是最好的学习资料.你是教授,级别高,可以单看代码研究,偶水平差只能折腾手册!)

Chunks其实是一个代名,Chunk可以是简单的一句print("haha");也可以是一个函数外加一个输出,输入语句,甚至可以是一个文件,例如我们第一篇测试时候的test.lua....你可以简单的理解为Chunk是统称..代表着一个由语句组成的集合..

第二:语句块blocks
语句块是一列语句段;从语法上来说,一个语句块跟一个 chunk 相同: 

    block ::
= chunk

一个语句块可以被显式的写成一个单独的语句段: 

    stat ::
= do block end

显式的语句块对于控制变量的作用范围很有用。有时候,显式的语句块被用来在另一个语句块中插入 
return 或是 break 
代码块(语句块):指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。

第三:控制结构

    注意:    控制结构的条件表达式结果可以是任何值,Lua认为falsenil为假,其他值为真。

        大学时候,老师跟我说,所有编程语言都是由三种结构组成,顺序结构,选择结构,循环结构.个人认为..这样设置的原因,和人的生活有很大关系,我们从生老病死,这个就是一个最简单的顺序结构.从生存到消失.人都需要的经历,但在生老病死的过程中我们又要面临选择..老爸老妈没得选择...你还没生,就是你还不存在,所以你没选择的权利,那么就是说选择是建立在已经存在的基础上的,所以编程就有了if(某某XX某某某)某某胜利..所以这个选择必须要是有选择前提的,如果这个选择是永远都没机会选择..(例如选择老母- -!没得选的)这个选择就没有了选择的意义了,还有循环,就是重复实现某事情,例如读书,7点起床然后上课,然后下课,然后冲凉,然后睡觉,然后又重复到7点起床然后上课,然后下课,然后冲凉,然后睡觉,然后又重复到7点起床..............,这就是一个循环.你必须重复地做某些事情的时候,就可以用循环这个结构是实现重复做某事.

         既然人的一生都是用这三中结构描述的,程序的出现,目的就是帮助人,减轻人的工作量,做这些结构也就是编程语言中的原住民了.

LUA的选择结构,貌似只有一种就是if
stat ::= if exp then block {elseif exp then block} [else block] end
简单的一句,就表明了,if-else支持嵌套elseif  写法有点像VB....
if a>10 then  print("超过10岁"
else print("小于10岁"
   end
这个就是一个简单的选择结构...有编程基础的一看就懂了.

LUA的循环结构,有三种,分别是while exp do block end , repeat block until exp ,for Name `=´ exp `,´ exp [`,´ exp] do block end
1.while exp do block end
while condition do

    statements;

end;
2. repeat block until exp
repeat

    statements;

until conditions;
有点类似do 
while
3.for....在LUA里for是有两种情况,如果用C#来描述的话,LUA的for含盖了C#里的for和foreach两种,

      数值for

for var=exp1,exp2,exp3 do

    loop
-part

end
for将 从exp1(初始值)到exp2(终止值),exp3是一个变化跨度值, 执行loop
-part。其中exp3可以省略,默认跨度默认为1
和传统的for结构一样for(int i=0;i<10;i++),只是在LUA里简化了很多;
例子:
   for i=10,1,-2 do

       print(i)

   end

输出结果为;
10
8
6
4
2
有几点需要注意:
          1. 三个表达式只会被计算一次,并且是在循环开始前。
          2. 控制变量var是局部变量自动被声明,并且只在循环内有效.
          3. 循环过程中不要改变控制变量的值,那样做的结果是不可预知的。如果要退出循环,使用break语句


范型for循环:
for namelist in explist1 do block end

这里和C
#的foreach基本一样
c#:
foreach(DataRow ss in dataTbale.Rows)
{
  
//输出ss[1]
}

LUA里
days 
= {"Sunday""Monday""Tuesday""Wednesday",

              
"Thursday""Friday""Saturday"}

for v in ipairs(days) do

    
print(days[v]);

end 

只要自己测试一下就知道结果了.
反正就是一个传统循环,一个迭代循环


还需要补充一个语句就是break,和return
break语句用来退出当前循环(for、repeat、while)。在循环外部不可以使用。

return用来从函数返回结果,当一个函数自然结束时,结尾会有一个默认的return。(这种函数类似pascal的过程(procedure))

Lua语法要求break和return只能出现在block的结尾一句(也就是说:作为chunk的最后一句,或者在end之前,或者else前,或者until前),例如:

local i 
= 1

while a[i] do

    
if a[i] == v then break end

    i 
= i + 1

end

有时候为了调试或者其他目的需要在block的中间使用return或者break,可以显式的使用do..end来实现:

function foo ()

    
return            --<< SYNTAX ERROR

    
-- 'return' is the last statement in the next block

    do 
return end        -- OK

                   
-- statements not reached

end

基本的结构我们都学习完了,学到这里我们基本的LUA都能看懂了,也不能算懂,起码知道LUA的大概意思了,基础语法(完)


明鏡臺
posted on 2009-05-12 14:50 ^乔乔^ 阅读(8549) 评论(0)  编辑 收藏 引用 所属分类: Lua学习笔记

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理