首先Lua执行的每一段代码都称之为“程序块”,一个程序块也就是一连串的语句或命令,例如一个源码文件或一行代码。Lua语句之间并不需要分隔符,如代码中的换行就不起任何作用,当然为了养成编码习惯当两条或者多条语句并列时最好使用分隔符进行分隔,如以下的四种都是合法的。

     x = 1; y = 2
 
     x = 1 y = 2 
 
     x = 1;
     y = 2;
 
     x = 1
     y = 2
 
一、标识符规范
     Lua中的标识符可以是由任意字母、数字、下划线组成的字符串,但不能以数字开头。还有,应避免使用以一个下划线并跟着一个或多个大写字母的标识符,因为Lua将这类标识符保留用作特殊的用途。例如“_VERSION”。
     当然Lua中有一些不能作为标识符的保留字:
     and、break、do、else、elseif、end、false、for、function、if、in、local、nil、not、or、repeat、return、then、true、until、while
Lua对大小写是敏感的。“false”与“faLse”、“False”都是不同的标识符、false是一个保留字。
     Lua中的注释符,行注释以“--”为开始字符的一行一直到行尾都属于注释部分,还有一种块注释以“--[[”开始至“]]”结束,如:
 
 
     Lua中的全局变量不需要声明,只需将一个值赋予一个全局变量即可创建,如上例的“x=1”这里的x就是全局变量,局部变量的声明是前面加保留字local
如:local x=1。Lua中的值在未初始化时默认为nil,引用一个未初始化的变量不会引发报错。
 
 
同样的,未初始化的变量为nil值,那么要删除一个已初始化的变量,只需要把它的值重新设为nil即可。
 
二、类型
     Lua是一种动态类型的语言。在语言中没有类型定义的语法,每个值都“携带”了它自身的类型信息。在Lua中有8种基础的类型:
nil(空)、boolean(布尔)、number(数字)、string(字符串)、userdata(自定义类型)、function(函数)、thread(线程)、table(表)
 
 
     Lua中变量没有预定义类型,任何变量都包含任何类型的值:
 
 
三、值
 
     nil是一种类型,它只有一个值nil,主要用于区别其他的任何值。Lua将nil表示为“无效值”。
     boolean类型只有两个可选值true和false。Lua将false和nil视为“假”,将其他任何值视为“真”。
     number类型用于表示实数。Lua中没有整数类型,因此Lua中的数字可以表示任何32位整数,而不会产生四舍五入的错误。
     string类型用于表示一个字符序列。Lua完全采用8为编码,Lua字符串中的字符可以具有任何数值编码,包括数值0。可以将任意二进制数据存储到一个字符串中。Lua的字符串是不可改变的值。如果要修改字符,就会根据修改要求来创建新的字符串。
     Lua提供了运行时的数字与字符串的自动转换。在一个字符串上应用算术操作时,Lua会尝试将这个字符串转换成一个数字:
 
 
  Lua不仅在算术操作中会以做这种强制转换,还会在其他任何需要数字的地方这么做。然而在Lua中也会把数字转换成为字符串使用“..”符号
 
 
  字符串与数字是不同的类型,因此 50 ==  ”50“ 是为false的,还可以使用tonumber、tostring函数进行数字与字符串的转换,然而tonumber转换时如果字符串中不能转换为正确的数字时,tonumber将返回nil。tostring可以转换任何数字与字符串。
 
 
如何获取字符串的长度:使用"#"长度操作符,在字符串前面加上#就可以获得长度。如:
 
 
     table是Lua中主要的数据结构机制,具有强大的功能。基于table可以以一种简单、统一和高效的方式来表示普通数组、符号表、集合、记录、队列和其他数据结构。Lua也是通过table来表示模块、包和对象的。table实现了”关联数组“,是一种具有特殊索引方式的数组。不仅可以通过整数来索引它,还可以使用字符串或其他非nil值类索引它。而且table是没有固定大小的,可以通过表元素来进行动态扩容。
     table在Lua中既不是”值“也不是”变量“,而是”对象“。可以将table想象为一种动态分配的对象,程序仅保存持有对他们的引用(可以理解为指针),Lua不会暗中产生table的副本或创建新的table,也不需要声明一个table。table是通过”构造表达式“完成的,最简单的构造表达式就是"{}"。
 
 
     table永远是”匿名的“,一个持有table的变量与table自身之间是没有固定关联性的。当程序没有对一个table进行引用时,Lua的垃圾收集器最终会删除该table,并复用它的内存。
 

Lua 学习笔记(二)语法、类型、值的更多相关文章

  1. C#学习笔记二: C#类型详解

    前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...

  2. Lua 学习笔记(二)

    七.再论lua函数 1.lua中的函数被认为是带有词法定界和第一类值    a.词法定界:被嵌套的函数可以访问外部函数的变量    b.第一类值: lua中的函数可以放在变量中    (函数指针?) ...

  3. Lua学习笔记(1) ——语法

    1.  Lua -i main.lua -i 进入交互模式 -l 加载一个库 -e  “lua code” 直接在命令行执行lua code 2. 注释 -- This is a line comme ...

  4. Redis学习笔记二 (BitMap算法分析与BitCount语法)

    Redis学习笔记二 一.BitMap是什么 就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身.我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省 ...

  5. [C#] 类型学习笔记三:自定义值类型

    既前两篇之后,这一篇我们讨论通过struct 关键字自定义值类型. 在第一篇已经讨论过值类型的优势,节省空间,不会触发Gargage Collection等等. 在对性能要求比较高的场景下,通过str ...

  6. python3.4学习笔记(二) 类型判断,异常处理,终止程序

    python3.4学习笔记(二) 类型判断,异常处理,终止程序,实例代码: #idle中按F5可以运行代码 #引入外部模块 import xxx #random模块,randint(开始数,结束数) ...

  7. [C#] 类型学习笔记二:详解对象之间的比较

    继上一篇对象类型后,这里我们一起探讨相等的判定. 相等判断有关的4个方法 CLR中,和相等有关系的方法有这么4种: (1) 最常见的 == 运算符 (2) Object的静态方法ReferenceEq ...

  8. [转]LUA 学习笔记

    Lua 学习笔记 入门级 一.环境配置 方式一: 1.资源下载http://www.lua.org/download.html 2.用src中的源码创建了一个工程,注释调luac.c中main函数,生 ...

  9. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  10. Lua 学习笔记(一)

    Lua学习笔记 1.lua的优势 a.可扩张性     b.简单     c.高效率     d.和平台无关 2.注释 a.单行注释 --        b.多行注释 --[[  --]] 3.类型和 ...

随机推荐

  1. 如何参与Linux内核开发(转)

    本文来源于linux内核代码的Document文件夹下的Hoto文件.Chinese translated version of Documentation/HOWTO If you have any ...

  2. 解决Win7下VC++6.0与Office不兼容的问题

    在Windows7下安装Visual C++ 6.0后,如果同时安装了Microsoft Office就会出现打开文件的时候出现异常,而导致VC6崩溃. 微软已经为我们解决了问题,开发出一个插件(Fi ...

  3. *关于httl开源Java模板的使用心得

    1.简介 HTTL (Hyper-Text Template Language) 是一个高性能的开源JAVA模板引擎, 适用于动态HTML页面输出, 可替代JSP页面, 指令和Velocity相似. ...

  4. [原创]cocos2dx加载网络图片&异步加载图片

    [动机] 之前看到一款卡牌游戏,当你要看全屏高清卡牌的时候,游戏会单独从网络上下载,本地只存了非高清的,这样可以省点包大小,所以我萌生了实现一个读取网络图片的类. [联想] 之前浏览网页的时候经常看到 ...

  5. oracle ORA-12514: TNS: no listener 解决方案

    服务端:oracle 11g 客户端: pl/sql 问题描述: 用客户端 pl/sql 连接登录的时候,提示 "ORA-12514: TNS: no listener". 在服务 ...

  6. ASP.NET MVC3 Razor 初心者容易遇到的問題(转)

    这是一些相关的文章地址 http://demo.tc/Post/679 http://blog.csdn.net/cheny_com/article/details/6298496

  7. Expression Tree 扩展MVC中的 HtmlHelper 和 UrlHelper

    表达式树是LINQ To everything 的基础,同时各种类库的Fluent API也 大量使用了Expression Tree.还记得我在不懂expression tree时,各种眼花缭乱的A ...

  8. C#中的线程一(委托中的异步)

    C#中的线程一(委托中的异步) 一.同步委托 我们平时所用的委托以同步居多,我们编写一个方法和相关委托进行演示: publicdelegatevoid DoSomethingDelegate(stri ...

  9. 作业3.2:psp

    PSP2.1 Personal Software Process Stages Time Planning 计划 20min Estimate 估计这个任务需要多长时间 3.5h Developmen ...

  10. angular controller as syntax vs scope

    今天要和大家分享的是angular从1.2版本开始带来了新语法Controller as.再次之前我们对于angular在view上的绑定都必须使用直接的scope对象,对于controller来说我 ...