文章摘要
–两个横线开始单行的注释,–[[加上两个[和]表示多行的注释–]]。
— 假设文件mod.lua的内容是:
local M={}local function sayMyName()
print(‘Hrunkner’)
endfunction M.sayHello()
print(‘Why hello there’)
sayMyName()
endreturn M
— 另一个文件也可以使用mod.lua的函数:
local mod=require(‘mod’) — 运行文件mod.lua.— require是包含模块的标准做法。
— require等价于: (针对没有被缓存的情况;参加后面的内容)
local mod=(function ()
end)()
— mod.lua就好像一个函数体,所以mod.lua的局部变量对外是不可见的。— 下面的代码是工作的,因为在mod.lua中mod=M:
mod.sayHello() — Says hello to Hrunkner.— 这是错误的;sayMyName只在mod.lua中存在:
mod.sayMyName() — 错误— require返回的值会被缓存,所以一个文件只会被运行一次,
— 即使它被require了多次。— 假设mod2.lua包含代码”print(‘Hi!’)”。
local a=require(‘mod2’) — 打印Hi!
local b=require(‘mod2’) — 不再打印; a=b.— dofile与require类似,只是不做缓存:
dofile(‘mod2’) –> Hi!
dofile(‘mod2’) –> Hi! (再次运行,与require不同)— loadfile加载一个lua文件,但是并不允许它。
f=loadfile(‘mod2’) — Calling f() runs mod2.lua.— loadstring是loadfile的字符串版本。
g=loadstring(‘print(343)’) –返回一个函数。
g() — 打印343; 在此之前什么也不打印。