liangzhouqu 2014-09-23
尽管Lua被称为是一种解释型的语言,但Lua确实允许在运行源代码之前,将源代码预编译成一种中间形式(类比Python的.pyc)。区别解释型语言的主要特征在于编译器是否是语言运行时库的一部分,即是否有能力执行动态生成的代码(Lua可以通过dofile执行Lua代码)。
其实,dofile的核心功能是由loadfile完成的,可以这样来定义dofile:
loadfile并不是执行代码,而只是编译,返回一个函数,由dofile执行。
如果多次运行一个文件,可以只调用一次loadfile,重复调用其返回的函数即可。
另外一个函数,loadstring从字符串加载代码:
代码如下:
> f = loadstring('print "hello"') > f() hello
代码如下:
> i = 1 > f = loadstring('i = i + 1') > =i 1 --不要完了交互式命令行中,一行代码默认一个block > f = loadstring('i=i+1') > do >> local i =1 >> f() >> print(i) >> end 1 > do >> local i = 1 >> local f = loadstring('i=i+1') >> f() >> print(i) >> end 1
代码如下:
function f() i = i+1 end
代码如下:
> do >> local i =1 >> function f() >> i = i + 1 >> end >> f() >> print(i) >> end 2