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码转义而已..
最令人犯晕的是下面..
这个想表达啥呢?其实这个作用和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
^乔乔^ 阅读(4680)
评论(3) 编辑 收藏 引用 所属分类:
Lua学习笔记