前言
Lua是一种紧凑的脚本语言。 来自巴西里约热内卢天主教大学(pontificalcatholicuniversityofriodejaneiro )的研究小组,由Roberto Ierusalimschy、Waldemar Celes、 由Luiz Henrique de Figueiredo组成,其目的是集成到APP应用程序中,为APP应用程序提供灵活的扩展和定制功能。 Lua是用标准c编写的,几乎可以在任何操作系统和平台上编译和运行。 Lua不提供强大的库。 这由它的定位决定。 因此,Lua不适合用作开发独立APP应用程序的语言。
Lua脚本可以很容易地在C/C代码中调用,反之也可以调用C/C函数。 这使Lua可以广泛用于APP应用程序。 它不仅可以作为扩展脚本,还可以作为常规配置文件,而不是XML、ini等文件格式,易于理解和维护。 所有与本文相关的演示都将在Linux上进行
Lua退出
首先不谈运行,直接谈退出。 是的。 因为运行Lua太简单了,所以直接输入Lua越简单。 但是退出确实需要单独说,很多人试图在lua界面上使用exit退出,结果突然把并蛋、干脆的Ctrl C和lua干死了。 正确的挤出姿势是这样的阿姨的,有两种方式
Ctrl D
操作系统. exit (
Lua执行
在lua交互式环境中,可以输入类似Python的短命令。 但是,要处理复杂的逻辑,必须将其单独放入文件中。 如何在lua交互模式下运行文件? 这也很容易就是lua xxx.lua。 和Python的使用方法一样。 但是,如果必须在交互式环境中运行lua脚本怎么办? 是的,使用dofile函数
learn.lua脚本
函数norm (x,y ) return ) x^2y^2) ^ 0.5使用end function twice (x ) x ) return2*xendviewcodedofile函数将lua脚本置于交互模式
[ root @ localhost learn ] # Lua Lua5.1. 4版权所有(c ) 1994-2008 Lua.org,puc-Rio dofile (/root/learn/learn.)
Lua语法
-单行注释
-[–]多行注释
注释
与C/C不同,Lua是动态类型语言。 Lua中的变量没有类型,值有类型,并且值本身具有自己的类型信息。 Lua有八种基本类型的函数: nil (空)、布尔(thdkl )、number )、字符串(string )、用户数据(function )、thread )和tabbad
类型与值
抄送的空值。
Lua中的变量,如果没有初始值,则该值为nil。 为变量分配nil相当于删除,相当于断开与一个内存的连接。 当一个内存不与任何变量相关时,Lua垃圾收集器会回收内存。
60px;”>boolean
用法同C/C++一样,但是有点小细节要注意
false:false、nil
true:0、空串
number
Lua中number默认相当于C/C++中的双精度浮点数,Lua中没有整数类型。写法上,和C/C++一样,支持多种表示方式
4 0.4 4.57e-3 0.3e12 5e+20
string
Lua的字符串是不可变的值(immutable values)。不能像在C语言中那样直接修改字符串的某个字符,而是应该根据修改要求来创建一个新的字符串。如下所示:
a = “one string”b = string.gsub(a,”one”,”another”)print(a) –>one stringprint(b) –>another string View Code
与许多动态语言类似,Lua也支持自动内存管理,很爽是不是!
关于string还有以下几点需要注意
①\number,即用ASCII表示字符
②支持引号内部嵌套引号
print(“one ‘two’ \”string\””) –>one ‘two’ “string”
③支持[[ ]]形式字符串
比如可以定义变量
c_code = [[lua_getglobal(L,”str”);string str = lua_tostring(L,-1);cout<<“str = “<<str.c_str()<<endl;]]
这种形式定义的变量有两个特点:
1、[[后的第一个换行符会忽略
2、忽略[[ … ]]内部的转义序列
这种形式定义的变量有两个潜在问题:
1、[[ … ]]内部如果包含 a=b[c[i]] 这样的语句,可能会提前结束字符串定义
2、[[ … ]]包含多行注释的情况,–]]可能会提前结束字符串定义
Lua的解决方案和CMake中多行注释是一个套路,即采用这种对称的这种符号[===[,等号数量任意
④某些情况西,Lua会自动进行字符串⇆数字的强制转换
print(“10″+1) –>11 字符串⇛数字print(10 .. 1) –>101 数字⇛字符串,注意10后面有个空格,否则Lua会把第一个.算成小数点,而不是连接符..
强烈不建议这种代码,可读性非常差。而是应该显式进行 字符串⇆数字 转换
print(tostring(10)==”10″) –>trueprint(tonumber(“10”)==10) –>true
⑤#可以获取字符串长度
print(#”hello”) –>5
table
Lua中的模块(module)、包(package)和对象(object)都是通过table来组织的。
当输入io.read的时候:
站在人的角度理解 ▶ io模块中的read函数
站在Lua的角度理解 ▶ 以字符串“read”作为key来索引table.io
Lua中的table跟其他语言中的字典是一个东西,除了可以使用数字索引外(Lua中数字索引从1开始),可以用任何其他类型的值作为table索引。
a.x 等价于 a[“x”]a[x] 表示取完x的值后再索引
#可以计算一个string的长度,同样也可以计算一个table的长度,table计算长度的方式类似于C/C++中字符串求长度知道遇到\0,table遇到nil就认为table结束了。
a={}a[1000]=1print(#a) –> 0print(table.maxn(a)) –> 1000
这种table类似于Linux下面空洞文件的概念,table中1~999都是nil,也就是有洞。因此print(#a)输出0。如果真需要处理“有洞”的table,可以使用函数table.maxn返回一个table的最大正索引数。
操作符
算数操作符
+ -(减法) * / % ^ -(负号)
与C/C++用法一样,单独说下%
Lua中 a%b 结果正负号与b相同
当x为实数时x % 1 –>x的小树部分x – x % 1 –>x的整数部分x – x % 0.01 –>x精确到小数点后两位
关系操作符
< > <= >= == ~=
与C/C++用法一样。关系操作符所作的工作本质上是比较,比较分为值比较,引用比较。Lua中table、userdata、function属于引用比较
a = {};a.x = 1; a.y = 0b = {};a.x = 1; a.y = 0a = c—————————————结果是a == ca ~= b
逻辑操作符
and or not
这是我第一个地方觉得Lua设计非人类的地方,主要原因是and or的用法原大多数语言都不一样,想不明白Lua为啥要搞成这样
and:如果第一个操作数为假,就返回第一个操作数,否则返回第二个操作数。
or: 如果第一个操作数为真,就返回第一个操作数,否则返回第二个操作数。
字符串连接符
..
Lua中的字符串是不可变的值(immutable value)。连接操作符只会创建一个新字符串,而不会对其原操作数进行任何修改
此外在对数字使用..的时候,..需要与数字之间留有空格
print(“10″+1) –>11 字符串⇛数字print(10 .. 1) –>101 数字⇛字符串,注意10后面有个空格,否则Lua会把第一个.算成小数点,而不是连接符..
转载于:https://www.cnblogs.com/kelamoyujuzhen/p/10159018.html
快三导师QQ包赚x”]a[x] 表示取完x的值后再索引
#可以计算一个string的长度,同样也可以计算一个table的长度,table计算长度的方式类似于C/C++中字符串求长度知道遇到\0,table遇到nil就认为table结束了。
a={}a[1000]=1print(#a) –> 0print(table.maxn(a)) –> 1000
这种table类似于Linux下面空洞文件的概念,table中1~999都是nil,也就是有洞。因此print(#a)输出0。如果真需要处理“有洞”的table,可以使用函数table.maxn返回一个table的最大正索引数。
操作符
算数操作符
+ -(减法) * / % ^ -(负号)
与C/C++用法一样,单独说下%
Lua中 a%b 结果正负号与b相同
当x为实数时x % 1 –>x的小树部分x – x % 1 –>x的整数部分x – x % 0.01 –>x精确到小数点后两位
关系操作符
< > <= >= == ~=
与C/C++用法一样。关系操作符所作的工作本质上是比较,比较分为值比较,引用比较。Lua中table、userdata、function属于引用比较
a = {};a.x = 1; a.y = 0b = {};a.x = 1; a.y = 0a = c—————————————结果是a == ca ~= b
逻辑操作符
and or not
这是我第一个地方觉得Lua设计非人类的地方,主要原因是and or的用法原大多数语言都不一样,想不明白Lua为啥要搞成这样
and:如果第一个操作数为假,就返回第一个操作数,否则返回第二个操作数。
or: 如果第一个操作数为真,就返回第一个操作数,否则返回第二个操作数。
字符串连接符
..
Lua中的字符串是不可变的值(immutable value)。连接操作符只会创建一个新字符串,而不会对其原操作数进行任何修改
此外在对数字使用..的时候,..需要与数字之间留有空格
print(“10″+1) –>11 字符串⇛数字print(10 .. 1) –>101 数字⇛字符串,注意10后面有个空格,否则Lua会把第一个.算成小数点,而不是连接符..
转载于:https://www.cnblogs.com/kelamoyujuzhen/p/10159018.html