一、Lua基本库中的代码加载函数
Lua基本库中有一些函数,能够在运行源码之前,先将源码预编译为一种中间形式,或者是
加载别的 lua 代码。
1. loadfile ( filename )
该函数会从一个文件加载 Lua 代码块,但它不会运行代码,只是编译代码,
然后将编译结果作为一个函数返回,当没有指定filename时装载标准输入(stdin)的内容。
2.dofile (filename)
功能:打开并且执行一个lua块,当忽略参数filename时,将执行标准输入设备(stdin)的内容。
返回所有块的返回值。当发生错误时,dofile将错误反射给调用者。
4.load (func [, chunkname])
功能:装载一个块中的函数,每次调用func将返回一个连接前一结的字串,在块结尾处将返回nil
当没有发生错误时,将返回一个编译完成的块作为函数,否则返回nil加上错误信息,
此函数的环境为全局环境chunkname用于错误和调试信息。
5.loadstring (string [, chunkname])
功能:与load类似,但装载的内容是一个字串
如:assert(loadstring(str))()
二、require 函数
Lua提供了一个名为 require 的高层函数来加载模块,但这个函数只假设了关于模块的基本概念。
对于 require 而言,一个模块就是一段定义了一些值的代码。
要加载一个模块,只需简单地调用 require ”< 模块名 > “。该调用会返回一个由模块函数组成的
table,并且还会定义一个包含该 table 的全局变量。然而,这些行为都是由模块完成的,而非 require。
所以,有些模块会选择返回其他值,或者具有其他的效果。
三、module 函数
编写一个模块时,可以直接用 module 函数来生成模块代码,相当于:
local modname = ...
local M = { }
_G[ modname ] = M
package.loaded[ modname ] = M
...
setfenv( 1, M )
module( ... ) 就等价于上面的代码。
三、包:package, 就是一系列的模块