AKever

导航

LUA loadstring 应用与优化

LUA loadstring 应用与优化

LUA loadstring

类似加载,从给定的字符串得到块。
要加载和运行一个给定的字符串

一般用法:

assert(loadstring(script))()

and then:

f = loadstring("a = 1")  
相当于:
f = loadstring("function() a = 1 end") 

复杂用法如下:

下面是动态加载字符串,并执行,结果为一个table

local  script="local ee={[0]={id=0,lv=5,text='yy'},[1]={id=1,lv=3,text='zz'}}  return ee"
local tb=assert(loadstring(script))()
print(tb[0].text)

下面是动态加载字符串,并执行,结果为方法

local  addscript="function dadd(a,b) return a+b  end"
assert(loadstring(addscript))()
print(tostring(dadd(2,3)))

 

优化:

尽量避免使用loadstring:性能比较: 

使用loadstring(在运行时编译代码)

a = os.clock()
local lim = 10000
local a = {}
for i = 1, lim do
    a[i] = loadstring(string.format("return %d", i))
end
b = os.clock()
print(b-a)
1.4 seconds

不适用loadstring

a = os.clock()
function fk (k)
    return function () return k end
end
local lim = 100000
local a = {}
for i = 1, lim do a[i] = fk(i) end
b = os.clock()
print(b-a)
0.14 seconds

结论:不要再运行时编译代码

 

posted on 2014-08-06 11:59  AKever  阅读(2291)  评论(0)    收藏  举报