Lua eval实现

Posted 一觉睡到小时候

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua eval实现相关的知识,希望对你有一定的参考价值。

因为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实现的主要内容,如果未能解决你的问题,请参考以下文章

lua学习笔记之-----5行代码完成ID发号器

高性能伪事务之Lua in Redis

php Lua eval的例子

redis EVAL 真的是原子的并且是安全的吗?

redis与lua

redis执行lua脚本