首先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. Main()

    P25 “每一个c#可执行文件都必须有一个入口——Main()方法” 我一直对这个Main()方法有一些疑问. 那就是这里头的参数. 在JAVA里,main(String args[])中的参数是绝对 ...

  2. Jquery,javascript 的处理机制

    $(document).ready(function () {    function get() {//        $.ajax({//            type: "Post& ...

  3. distinct order by 排序问题

    使用类似“SELECT DISTINCT `col` FROM `tb_name` ORDER BY `time` DESC”这样的sql语句时,会遇到排序问题. 以上面的sql语句分析:order ...

  4. phoenix 开发API系列 目录

    phoenix 开发API系列(一)创建简单的http api phoenix 开发API系列(二)phoenix 各类 api 实现方式 phoenix 开发API系列(三)phoenix api ...

  5. 微信公共平台开发-(.net实现)3--发送文本消息

    最近,项目这边比较忙,没来得及续写,哎,先吐吐槽吧,在这个周六还得来上班,以后每个周六多要上,一天的滋味真有点受不鸟呀.还不习惯ing... 嗯,别的不说了现在开始接着上次http://www.cnb ...

  6. RCP:eclipse的DEBUG机制

    Eclipse debug文档翻译 运行一个程序需要添加launch configurable,在自定义launch configuration的时候会指定模式,比如run,debug,profile ...

  7. UWP的一种下拉刷新实现

    简介 我们最近实现了一个在UWP中使用的下拉刷新功能,以满足用户的需求,因为这是下拉刷新是一种常见的操作方式,而UWP本身并不提供这一机制. 通过下拉刷新这一机制,可以让移动端的界面设计变得更加简单, ...

  8. dojo/dom-construct.toDom方法学习笔记

    toDom方法用来将html标签字符串转化成DOM节点.1.7之后toDom方法被分配到了dom-construct模块. require(["dojo/dom-construct" ...

  9. Ubuntu Desktop基本办公环境搭建

    Ubuntu Desktop基本办公环境搭建 一如前面所强调的, linux系统是面向开发人员友好的,而对office办公人员并不友好 . 如果是重度的office办公需求人员,不建议使用linux ...

  10. 《C#图解教程》读书笔记之三:方法

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.方法那些事儿 (1)方法的结构:方法头—指定方法的特征,方法体—可执行代码的语句序列: (2)方法的调用:参 ...