首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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的表不仅在某种意义上是一种对象,像对象一样,表也有状态,也有与对象的值独立的本性,特别是拥

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180110G05PGD00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券