Lua语法基础(1)---简介、基本数据类型、表达式
我觉得我已经陷入了一个坑内。因为,安装了Lua和SublimeText3编辑器之后,怎么使自己编写的lua代码在untiy内运行起来,是个我完全不了解的机制。先放一放吧。首先,来回顾一下Lua的语法基础。
第一 起点
在Lua中具有一个Chunks的概念。Chunk是一系列语句,Lua执行的每一块语句,比如一个文件或者交互模式下的每一行都是一个Chunk。一个代码块,可以是一个语句,一系列语句的组合,或者一个函数。
注意,在交互模式下,Lua通常把每一个行当作一个Chunk,但如果Lua一行不是一个完整的Chunk时,他会等待继续输入直到得到一个完整的Chunk.在Lua等待续行时,显示不同的提示符(一般是>>)。这个其实,木有太有用哦。
当然,Lua和其他语言一样,也有关键字,大体如下:
and break do else elseif end false for function if in local nil not or repeat return then true until while
注意:Lua是大小写敏感的。
单行注释: --
块注释:--[[ ]]
第二 基本数据类型
Lua是动态类型语言,变量不要类型定义。Lua中有8个基本类型分别为:nil、boolean、number、string、userdata、function、thread和table。函数type可以测试给定变量或者值的类型。
Nil :一个全局变量没有被赋值以前,默认值为nil,给一个变量赋值为nil,表示释放该变量。
Boolean:只有两个值,true和false。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。
Numbers:表示实数,Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用长整型或者单精度浮点型代替numbers。
Strings:指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着可以存储任意的二进制数据在一个字符串里。
a、类型转换
运行时,Lua会自动在string和numbers之间自动进行类型转换,当一个字符串使用算术操作符时,string就会被转成数字。另外,也可以使用tonumber()函数和tostring()函数显式地进行字符与数字的转换。tonumber()函数转换时,如果string不是正确的数字该函数将返回nil。 见代码实例:
--字符与数字的隐式转换 print("10" + 7) --输出结果为:17,将字符10隐私转化为Number类型计算 print("hello" + 7) --无法进行运算,即不能隐式将"hello"字符转化为Number计算 --[[系统错误如下: stdin:1: attempt to perform arithmetic on a string value stack traceback: stdin:1: in main chunk [C]: ? --]]--字符与数字的显式转换 print(tonumber("100")+11) --输出结果为:111 print(type(tostring(100))) --输出结果为:string
b、常用的字符处理函数介绍
string.char()函数根据传入的ASCII编码返回该编码对应的字符。如:string.char(10),表示字符换行符,10是换行符的ASCII编码。
a and b -- 如果a为false,则返回a,否则返回b a or b -- 如果a为true,则返回a,否则返回b
例如:
print(4 and 5) --> 5 print(nil and 13) --> nil print(false and 13) --> false print(4 or 5) --> 4 print(false or 5) --> 5
一个很实用的技巧:如果x为false或者nil则给x赋初始值v
x = x or v等价于if not x then x = v end
and 的优先级比or高。
C语言中的三元运算符可以在Lua中实现,如下:
a ? b : c 等价于 (a and b) or c 或者直接写成 a and b or c
not的结果一直返回false或者true
print(not nil) --> true print(not false) --> true print(not 0) --> false print(not not nil) --> false
连接运算符:字符串连接,如果操作数为数字,Lua将数字转成字符串。
最重要的运算符的优先级,从高到低的顺序:
^ not - (unary) * / + - .. < > <= >= ~= == and or除了^和..外所有的二元运算符都是左连接的。 a+i < b/2+1 <--> (a+i) < ((b/2)+1) 5+x^2*8 <--> 5+((x^2)*8) a < y and y <= z <--> (a < y) and (y <= z) -x^2 <--> -(x^2) x^y^z <--> x^(y^z)
Table表的构造
days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
如果想初始化一个表作为record使用可以这样:
a = {x=0, y=0} <--> a = {}; a.x=0; a.y=0
不管用何种方式创建table,我们都可以向表中添加或者删除任何类型的域,构造函数仅仅影响表的初始化。
w = {x=0, y=0, label="console"} x = {sin(0), sin(1), sin(2)} w[1] = "another field" x.f = w print(w["x"]) --> 0 print(w[1]) --> another field print(x.f[1]) --> another field w.x = nil -- remove field "x"
还可以将表table作为table的一个成员,从而构成多维表。
polyline = {color="blue", thickness=2, npoints=4, {x=0, y=0}, {x=-10, y=0}, {x=-10, y=1}, {x=0, y=1} }
Lua语法基础(1)---简介、基本数据类型、表达式相关推荐
- VRML语法基础跟简介
VRML语法基础和简介 VRML简介和基础语法 -------------------------------------------- 一.VRML是什么 VRML是虚拟现实造型语言 (Virtua ...
- Excel-VBA基础语法(VBA简介、数据类型、变量、数组、运算符、内置函数、过程与函数)
转载自:https://www.cnblogs.com/wzh313/articles/9737573.html 一.VBA介绍 1.宏和VBA的关系 vba是编程语言,宏是用vba代码保存下来的程序 ...
- VRML语法基础和简介
VRML简介和基础语法 -------------------------------------------------------------------------------- 一.VRML是 ...
- JAVA_web基础 JavaScript简介、基础、语法
1. JavaScript简介 1.1. JavaScript由来 Netscape 发明了 JavaScript JavaScript由Netscape 在1995年发明.早期的主要目的是处理一些用 ...
- C#基础编程——简介及基础语法
C#基础编程--简介及基础语法 百科介绍 C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言.运行于.NET Framework和.NET Core(完全开源,跨平台)之上的高级程序设计 ...
- R语言数据可视化 ggplot2基础1 ggplot2 图形的分层语法 Layered Grammar 简介
R语言数据可视化 ggplot2基础1 ggplot2 图形的分层语法 Layered Grammar 简介 分层语法的组成(data-stat-geom-scale-coord-facet) 用分层 ...
- 【JAVA SE】第二章 Java语法基础、数据类型、基本类型的字面值、基本类型的类型转换和运算规则
第二章 Java语法基础.数据类型.基本类型的字面值.基本类型的类型转换.运算规则和标识符命名风格 文章目录 第二章 Java语法基础.数据类型.基本类型的字面值.基本类型的类型转换.运算规则和标识符 ...
- 【JavaScript总结】JavaScript语法基础:数据类型
------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...
- C语言有四种基本常量,C语言语法基础
声明:本课件在电脑上可正常浏览,在手机或平板电脑上只能浏览到简介. C语言语法基础的内容简介: 一..标识符 一个名字,对常量.变量.类型.语句.标号和函数进行命名 标识符的种类: 关键字 预定义标识 ...
最新文章
- 虚拟机下CentOS 6.5配置IP地址的三种方法
- assertequal用法python_assertEqual和assertIs之间有什么区别(assertIs是在Python 2.7中引入的)?...
- RabbitMQ下的生产消费者模式与订阅发布模式
- JSON 解析的两种方法
- arduino neo 定位不可用_arduino霹雳七彩灯
- 数据泵 远程服务端数据导出
- 【kafka】Kafka ConsumerOffsetChecker 命令失效问题解决 卡死
- oracle rac心跳机制_详解RAC集群中cache fushion原理
- 信贷风控中如何定位基站位置
- java从键盘输入任意一组数据存入数组中统计非负数个数及非负数个数
- SD卡和文件系统那些事儿
- 十进制数转换为二进制,八进制,十六进制数的算法(欢迎拍砖)
- 一个有趣的实验之OSPF中RID相同建邻
- AVD Pixel_2_API_30 is already running. lf that is not the case, delete the files at
- python3中字符串的切片练习
- web微信js WechatWeb js方法
- 文件操作(2):文件粉碎机
- 计算机网络及工程实践西安电子科技有限公司,计算机网络-西安电子科技大学电子工程学院.PDF...
- 关于对vfs的简单理解
- 苹果企业开发者账号的详细解释