dofile():调用代码段

  • dofile(filename)调用文件代码,在调用处编译并运行

    1. 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为止