首先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. javascript、jQuery函数定义和调用方法

    一.javascript 1.var aaa=function(){...} var 方式定义的函数,不能先调用函数,后声明,只能先声明函数,然后调用. 2.function aaa(){...} f ...

  2. JavaScript 基础第九天(DOM第三天)

    一.引言 我们昨天介绍了很多的概念以及大部分我们可以在工作中用到的事件,那么今天我们将运用这些知识做一些效果! 二.导入 今天的内容以实例为主. 三.重点内容 祝愿墙的简单构建: 首先我将介绍出本次实 ...

  3. MyEclipse使用技巧

    1.    大小写切换:  Ctrl + Shift + X   大写: Ctrl + Shift + Y   小写: 2.   自动导包: Ctrl + Shift + O 3.   运行前自动保存 ...

  4. (转载)JAVA线程池管理

    平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头.怎么做一套简便的线程开发模式 ...

  5. 彻底理解ThreadLocal二

    首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的.各 ...

  6. 算法:Astar寻路算法改进,双向A*寻路算法

    早前写了一篇关于A*算法的文章:<算法:Astar寻路算法改进> 最近在写个js的UI框架,顺便实现了一个js版本的A*算法,与之前不同的是,该A*算法是个双向A*. 双向A*有什么好处呢 ...

  7. android知识杂记(二)

    记录项目中的android零碎知识点,用以备忘. AsyncQueryHandler 继承与handler,可以用于处理增删改(ContentProvider提供的数据) 例如:query = new ...

  8. Win10 UWP应用发布流程

    简介 Win10 UWP应用作为和Win8.1 UAP应用不同的一种新应用形式,其上传至Windows应用商店的流程也有了一些改变. 这篇博文记录了我们发布一款Win10 UWP应用的基本流程,希望为 ...

  9. 【C语言学习】《C Primer Plus》第11章 字符串和字符串函数

    学习总结 1.字符串(character String)是以空字符串(\o)结尾的char数组. 2.gets()方法代表get String,它从系统的标准输入设备(通常是键盘)获取一个字符串,当字 ...

  10. 上层建筑——DOM元素的特性与属性(dojo/dom-attr)

    上一篇返本求源中,我们从DOM基础的角度出发,总结了特性与属性的关系.本文中,我们来看看dojo框架是如何处理特性与属性的.dojo框架中特性的处理位于dojo/dom-attr模块属性的处理为与do ...