首页 > 编程知识 正文

lua参考手册,菜鸟教程 lua

时间:2023-05-06 14:23:46 阅读:47664 作者:3901

前言

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++中字符串求长度知道遇到,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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。