dofile():调用代码段
dofile(filename):调用文件中代码,在调用处编译并运行
dofile("Chapter 16\\hello.lua")
loadfile():加载代码段
loadfile(filename):从文件中加载Lua代码段,但不运行,只编译,然后将编译后的返回为一个函数
- 返回的是一个函数,使用时要加**()**
- 在loadfile()后可以随时使用返回的函数,调用编译内容
- 如果发生错误,则会返回nil
- 注:loadfile()是返回编译的函数,如果需要多次调用文件代码,则使用loadfile速度快于dofile ```lua f = assert(loadfile(“Chapter 16\hello.lua”))
f()
f() —可随时调用loadfile编译后的函数
f=loadfile(“Chapter 16\hello.lua”) print(f) —如果loadfile错误则输出nil
<a name="fq4Rt"></a>
# load():调用字符串的代码
- **load(str)**:从一个**字符串中读取代码段**的函数,**返回**一个**函数**
- **返回**的是一个**函数**,**使用**时**要加()**
- 有**错误**,则**返回nil**和**错误信息**
- **load函数中的代码,总是运行在全局变量环境中**
- **load返回的是一个普通的函数,因此使用return,可以使得load形成一个有返回值的函数**
- **load可以使用读取函数作为参数**
```lua
i = 33
local i = 1
print(i) --输出局部变量:1
load("print(i)")() --输出全局变量:33
-------------------------------------------------------------------------
print("enter expression:")
local line = io.read() --读取输入
local func = assert(load("return " .. line)) --使用load加载 return line函数
print("result of function:" .. func()) --使用return则load构成了一个有返回值的函数
-------------------------------------------------------------------------
f = load(io.lines(filename, "L")) --使用读取函数,直到读取到nil为止