Lua语言相关简介
Posted 学术李
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua语言相关简介相关的知识,希望对你有一定的参考价值。
lua --- LFS库的使用
1. lfs.attributes(filepath[, aname]) 获取路径指定属性。
2. lfs.chdir(path)改变当前工作目录,成功返回true,失败返回nil加上错误信息。
3. lfs.currentdir 获取当前工作目录,成功返回路径,失败返回nil加上错误信息。
4. lfs.dir(path) 返回一个迭代器(function)和一个目录(userdata), 每次迭代器都会返回一个路径,直到不是文件目录位置,则返回nil。
5. lfs.lock_dir(filehandle, mode[,start[, length])
6. lfs.mkdir(dirname) 创建一个目录。
7. lfs.rmdir(dirname) 删除一个已经存在的目录。
ALL API of lua——LFS(LuaFileSystem) reference to http://keplerproject.github.io/luafilesystem/manual.html
lua --- Image
该模块没找到,不过好像是torch7中有所使用
lua 中的loadfile, dofile, require
loadfile故名思议,它只会加载文件,编译代码,不会运行文件里的代码。
dofile则在加载文件之后,还会执行里面的代码
require和dofile有点像,不过又很不一样,require在第一次加载文件的时候,会执行里面的代码。 但是,第二次之后,再次加载文件,则不会重复执行了。换句话说,它会保存已经加载过的文件,不会重复加载。
lua -- table(表)
table是lua的一种数据结构,用来帮助我们创建不同的数据类型。如:数字,字典等。
lua table使用关联型数组,可以用任意类型的值来做数组的索引, 但这个值不能是nil。
lua table是不固定大小的, 你可以根据自己需要进行扩容。
Lua 也是通过table来解决模块(module)、包(package)、和对象(object)的。例如string.format表示使用“format”来索引table.string。
1、table的构造:构造器是创建和初始化表的表达式。最简单的构造函数是{},用来创建一个空表,可以直接初始化数组:
(1)mytable={}, 初始化表(2)mytable[1]=“lua”,指定值 (3)mytable=nil,移除引用,垃圾回收会释放内存。
2、当我们为table a 并设置元素,然后将a赋值给b,则a与b都指向同一个内存。如果a设置为nil,则b同样能访问table的元素。如果没有指定的变量指向a,Lua的垃圾回收机制会清理相对应的内存。
3、table.concat(table,sep, start, end):该函数列出参数中指定table的数组部分从start位置到end位置的所有元素,元素间用指定的分隔符'sep'隔开。
table.insert(table, pos, value):在table数组的部分指定位置pos插入值为value的一个元素。pos参数可选,默认为数组部分末尾。
table.maxn(table):指定table中所有正数key值中最大的key值,如果不存在key值为正数的元素,则返回0。
table.remove(table, pos):返回table数组部分位于pos位置的元素,其后的元素会被前移,pos参数可选,默认为table长度,即从最后一个元素删起。
table.sort(table, comp):对给定的table进行升序排序。
lua--模块与包
1、模块类似与封装库,Lua引入了标准的模块管理机制,可以把一些共用的代码放在一个文件里,以API接口的形式在其他地方调用,有利于代码的重用和降低代码的耦合度。
2、lua的模块是由变量、函数等已知元素组成的table,因此创建一个模块很简单,就是创建一个table,然后把需要导出的常量、函数放入其中,最后返回这个table就行。
3、require函数,Lua提供了一个名为require的函数用来加载模块。要加载一个模块,只需要简单的调用就可以了,例如:
require("模块名"), 或者require "模块名",执行require之后会返回一个由模块常量或函数组成的table,并且还会定义一个包含该table的全局变量。
当然也可以给加载的模块定义一个别名变量,例如:local m = require("module")
4、对于自定义的模块, 函数require有它自己的文件路径加载策略,它会尝试从Lua文件或C程序库中加载模块。
require用于搜索Lua文件的路径是否存放在全局变量package.path中,当Lua启动后,会以环境变量LUA_PATH的值来初始这个环境变量。如果没有找到该环境变量,则使用一个编译时定义的默认路径来初始化。
当然,如果没有LUA_PATH这个环境变量,也可以自定义设置,在当前用户根目录下打开.profile文件(没有则创建,打开.bashrc文件也可以). 例如:
#LUA_PATH
export LUA_PATH ="~/lua/?.lua;;"文件路径以“;”分割,最后两个“;;”表示新加的路径后面加上原来的默认路径。
接着,更新环境变量参数,是指立即生效。“source ~/.bashrc 或者 source ~/.profile”
如果找过目标文件,则会调用package.loadfile来加载模块。否则,就会去找C程序库。
搜索的文件路径是从package.cpath获取,而这个变量则是通过环境变量LUA_CPATH来初始。搜索的策略跟上面的一样,只不过现在换成的是so或dll类型的文件。如果找得到,那么require就会通过package.loadlib来加载它。
Lua -- metatable元表
1、在Lua table中我们可以访问对应的key来得到value值,但是却无法对两个table进行操作。因此Lua提供了元表(Metatable),允许我们改变table的行为,每个行为关联了对应的元方法。
Lua 查找一个表元素时的规则,按照下面三个步骤:
1.在表中查找,如果找到,返回该元素,找不到则继续
2.判断该表是否有元表,如果没有元表则返回nil, 有元表则继续。
3.判断元表有没有__index方法,如果__index方法为nil,如果__index方法是一个表,则重复1,2,3;如果__index方法是一个函数,则返回该函数的返回值。
__newindex元方法用来对表进行更新,__index则用来对表访问。
当你给表的一个缺少的索引赋值,解释器就会查找__newindex元方法:如果存在则调用这个函数而不进行赋值操作。
__call元方法在Lua调用一个值时调用。
__tostring元方法用于修改表的输出行为。
lua -- ipairs 和 pairs的不同
pairs可以遍历表中所有的key,并且除了表和迭代器本身还可以返回nil。
但是ipairs却不能返回nil, 只能返回数字0, 如果遇到nil则退出。它只能遍历到表中出现的第一个不是整数的key。
lua -- 面向对象
lua中的function可以用来表示方法,lua中的类可以通过table+function模拟出来。
继承则可以通过metatable模拟出来,lua的表不仅在某种意义上是一种对象,像对象一样,表也有状态,也有与对象的值独立的本性,特别是拥
以上是关于Lua语言相关简介的主要内容,如果未能解决你的问题,请参考以下文章
Lua语言(stm32+2G/4G模块)和C语言(stm32+esp8266)从字符串中提取相关数据的方法-整理