首先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. ELb表达式

    主要用于servlet的4个作用域取值:pageScope.requestScope.sessionScope.applicationScope 取值顺序依次从小到大.取值方式如:操作javabean ...

  2. mysql获取所有分类的前n条记录的两种方法浅析

      项目中有个需求是获取出展会分类下的前n条展商. 刚开始的思路是用group by 获取出展会的分类,后面再根据分类获取该分类下的n个展商,但也需要第一次获取出展会的时候也获取所有的每个展会分类下的 ...

  3. JS继承模式粗探

    之前提到了JS中比较简单的设计模式,在各种设计模式中被最常使用的工具之一就是原型链的继承.作为OOP的特质之一——继承,今天主要谈谈JS中比较简单的继承方法. 最基础的原型链继承在这里就不复述了,主要 ...

  4. iOS 里面 NSTimer 防止 循环引用

    使用NSTimer的类 #import "TBTimerTestObject.h" #import "TBWeakTimerTarget.h" @interfa ...

  5. html2canvas插件对整个网页或者网页某一部分截图并保存为图片

    html2canvas能够实现在用户浏览器端直接对整个或部分页面进行截屏.这个脚本将当前页面渲染成一个canvas图片,通过读取DOM并将不同的样式应用到这些元素上实现.它不需要来自服务器任何渲染,整 ...

  6. C# 轻量级ORM 编写思维

    目标: 降低研发人员门槛,提高效率,去除重复引用DLL的工作,基础配置由抽象工厂处理. 基础扩展 /// <summary> /// DataTable 转换为List 集合 /// &l ...

  7. 用JQ仿造礼德财富网的图片查看器

    现在就职于一家P2P平台,自然也会关注同行其它网站的前端技术,今天要仿造的是礼德内页的一个图片查看器效果.不过说白了,无论人人贷也好礼德财富也好,很多地方的前端都做的不尽如人意,比如忽略细节.缺乏交互 ...

  8. STC12C5A60S2笔记4(复位)

    1. 基本特性 STC 单片机有5种复位方式: 1) 热启动复位: 1.1)外部RST引脚复位 第一功能复位脚,即管脚9 RST/P4.7,该管脚拉高维持24个时钟周期+10ms后,单片机进入复位状态 ...

  9. web.xml详解

    web.xml的作用 web.xml,一个Tomcat工程中最重要的配置文件.web.xml没有其实也可以----只要你确定你的项目里面不需要任何过滤器.监听器.Servlet等等.我试了一下,没有w ...

  10. DeviceOne 竟然做出来如此复杂的App

    分享来自DeviceOne论坛 此文章分享自DeviceOne的论坛,论坛上的用户分享,下面有二维码扫描,可以进行安装和试用.支持android和ios两个 操作系统. 这个还没做完,目前已经完成了初 ...