Lua中如何让表格内的算术表达式为未计算的字符串而非结果
Lua 在代码编译阶段就会对字面量算术表达式做求值,因此直接把1 + 1这类表达式写在表构造器中时,最终存入表的是求值后的结果 2,无法直接获取原始表达式内容。可以通过以下两种方案实现需求:
方案1:直接存储表达式字符串(最推荐)
就是你示例中 stringProblems 的写法,直接把算术表达式用引号包裹为字符串存入表即可,实现成本最低、可读性最好。
如果后续需要对表达式做求值,可以封装简单的通用计算函数:
local stringProblems = { "1 + 1", "2 + 2", } -- 表达式求值函数 local function eval(expr) local calc_func = load("return " .. expr) if calc_func then return calc_func() end return nil, "非法表达式" end print(stringProblems[1]) -- 输出原始表达式:1 + 1 print(eval(stringProblems[1])) -- 输出表达式计算结果:2
方案2:封装构造函数(适合表达式量多的场景)
如果需要存储的表达式数量很多,不想手动逐个加引号,可以封装专用的构造函数统一处理,后续扩展逻辑也更方便:
-- 表达式构造函数,后续可拓展缓存、预校验等能力 local function new_problem(expr) return expr end local problems = { new_problem("1 + 1"), new_problem("2 + 2"), } print(problems[1]) -- 输出:1 + 1
内容的提问来源于stack exchange,提问作者KLB
相关产品推荐
相关产品推荐

