码迷,mamicode.com
首页 > 其他好文 > 详细

Lua eval实现

时间:2017-05-25 22:03:56      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:它的   color   cti   全局变量   env   log   val   load   span   

因为loadstring总是在全局环境中编译它的串,所以编译出的函数访问的变量是全局变量。为了避免污染全局环境我们需要用setfenv修改函数的环境

function eval(equation, variables)
    if(type(equation) == "string") then
        local eval = loadstring("return "..equation);
        if(type(eval) == "function") then
            setfenv(eval, variables or {});
            return eval();
        end
    end
end

使用:

local str = "200+lv*10+growth*0.1"

local val = eval(str, {lv = 3, growth = 100})

print(val)--240

Lua eval实现

标签:它的   color   cti   全局变量   env   log   val   load   span   

原文地址:http://www.cnblogs.com/wrbxdj/p/6905897.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!