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

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

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

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

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


     学习LUA第6个小时了,这是第2篇文章,也是我今天学习的最后总结了,LUA我也是个初学者,我目标只是想尽可能的把自己学习的一些想法表现出来.可能写的没有那些大虾们好,大虾们的生动.但至少是我个人的写作,本人很不喜欢转载的,转载不如直接去别人BLOG看..再一次声明..我是LUA初学者,一个初学者写给初学者的....废话不说..入正题.

     
        任何语言,首先要明白的是 标识符 的命名规则,LUA的规则和C语言的没太大分别都是由:字母,数字,下划线组成,而且不能以数字开头..貌似我会的编程语言都是这样的规定..   这个没啥技术难度....靠死记的..
        LUA的字符串表示是可以用单引号或者双引号的...这点跟JAVASCRIPT是一样的,
        在LUA手册里有一段这样的东西

     a  =   ' alo\n123" '
     a 
=   " alo\n123\ ""
     a  =   ' \97lo\10\04923" '
     a 
=  [[alo
     
123 " ]]
     a  =  [ == [
     alo
     
123 " ]==]
手册里的解释是这样的
字符串还可以用一种长括号括起来的方式定义。我们把两个正的方括号间插入 n 个等号定义为第 n 级正长括号。就是说,0 级正的长括号写作 [[ ,一级正的长括号写作 [=[ ,如此等等。反的长扩展也作类似定义;举个例子,4 级反的长括号写作 ]====] 。一个长字符串可以由任何一级的正的长括号开始,而由第一个碰到的同级反的长括号结束。整个词法分析过程将不受分行限制,不处理任何转意符,并且忽略掉任何不同级别的长括号。这种方式描述的字符串可以包含任何东西,当然特定级别的反长括号除外。 

另一个约定是,当正的长括号后面立即跟了一个换行符,这个换行符就不包含在这个字符串内。举个例子,假设一个系统使用 ASCII 码(这时,
'a' 编码为 97 ,换行符编码为 10 ,'1' 编码为 49 ),下面五种方式描述了完全相同的字符串: 

很别扭啊手册里的介绍是这个a所代表的字符串显示都是一样的...感觉犯晕啊...

手册例子想表达的意思我解析一下,
a = 'alo\n123"'  这个字符串是用单引号括起来的,123后面跟了个".....想表达的意思就是说,如果用单引号作为字符串的引用的话,内部的双引号做双引号处理,
a = "alo\n123\"" 这个字符串则是用双引号括起来的,为了解决冲突,就要使用转义字符\"去代表"
a = '\97lo\10\04923"'  这个其实就是ASCII码转义而已..
最令人犯晕的是下面..
= [==[
alo
123"]==]
这个想表达啥呢?其实这个作用和C#里的@""有点类似..有点像格式输出吧,,
里面的思想有个灵活的配对,"[["  在手册里有个名字,叫长括号,而在"[==["中间的等号个数代表多少级的长括号,没有等号为0级,1个等号为1级,类推下去.

开始在代码里,我以为这里"级"的意义在于这个字符串占多少行的意思,但是经过我代码的测试原来没任何关系..
依照我这个初学者的猜测...设置这些的意义,目的就是一个避免字符串内过多的使用转义字符吧,LUA的目标是要做嵌入脚本语言,
例如有个游戏的对白,
小孩说:"很牛啊"
牛说:
"不牛"
牛说:
"]]"
小孩说:
"]=]"
将以上字符
a=[==[
小孩说:"很牛啊"
牛说:
"不牛"
牛说:
"]]"
小孩说:
"]=]"]==]
这样在[==[里就可以使用任何的字符串表达符,提供了更大的灵活性.


后来我咨询了下LUA高手他给我的答复如下
这个是5.1版本新加的功能,我想主要的作用是屏蔽转义字符的作用的,在5.0的时候,我们写lua都需要自己可意去回避一些转义字符..这个只是我个人想法,你可以问问其他人,目前我实际应用的开发都是5.0居多,这个是5.1新加的,我也不是很确定,但照字面意思..就算不全对,也差不多了

看来我的猜想是正确的.


变量

LUA称为脚本语言,那么就注定了他的变量是弱类型的,就是说变量没有类型,至少我认识的脚本语言JAVASCRIPT就是没类型的.所以姑且把脚本语言定义为变量没有类型的语言就是脚本语言...(某XX教授:你丫的乱下定义误人子弟!..纯粹是帮助记忆...别教真...别教真).
                                     变量没有类型,有类型的只是值 (脚本语言的特点)         
Lua 中有八种基本类型: nil, boolean, number, string, function, userdata, thread, and table. Nil 类型只有一种值 nil ,它的主要用途用于标表识和别的任何值的差异;通常,当需要描述一个无意义的值时会用到它。 Boolean 类型只有两种值:false 和 true。 nil 和 false 都能导致条件为假;而另外所有的值都被当作真。 Number 表示实数(双精度浮点数)。(编译一个其它内部数字类型的 Lua 解释器是件很容易的事;比如把内部数字类型改作单精度浮点数或长整型。参见文件 luaconf.h 。) String 表示一串字符的数组。 Lua 是 8-bit clean 的:字符串可以包含任何 8 位字符,包括零结束符 ('\0'

userdata 类型用来将任意 C 数据保存在 Lua 变量中。这个类型相当于一块原生的内存,除了赋值和相同性判断,Lua 没有为之预定义任何操作。然而,通过使用 metatable (元表) ,程序员可以为 userdata 自定义一组操作. userdata 不能在 Lua 中创建出来,也不能在 Lua 中修改。这样的操作只能通过 C API。这一点保证了宿主程序完全掌管其中的数据。

大家都知道,C语言里有几个特别的数据构造,例如,结构体,共用体等,这个userdata 类型其实就满足结构体传值的功能的数据类型,至少我现在是这样理解的..至于元表我还没有接触,暂时将userdata 类型等同于一个只读类型.

Lua 中有三类变量:全局变量,局部变量,还有 table 的域。 其实今天大多的时候都花费在字符串里,但是一种语言来说,字符也是一个很重要的重点,例如C#基本提供了每个类都是 ToString()方法,C语言,单独用一章介绍字符串,数据结构里也独立一个章专门说字符串,所以这个字符串是在我们日常开发中经常用到的,对它理解得深其实是有好处的...今天就到这里

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

FeedBack:
# re: lua学习之入门(二)----基础语法1
2009-05-12 08:07 | resile
看了,很不错,但有些地方有失误,希望楼主改进啊!就是那个命名规则,不能以数字开头,你写成了不能……  回复  更多评论
  
# re: lua学习之入门(二)----基础语法1
2009-05-12 12:26 | 梁乔峰
@resile

谢谢,昨晚写的匆忙,很多错误字,还有些地方说错了,我基本读了一次,作出了一些更改...希望问题少点  回复  更多评论
  
# re: lua学习之入门(二)----基础语法1
2015-12-16 10:44 | 峰,少白
高中如何学习?
  回复  更多评论
  

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