Lua中如何使用变量作为键访问字典的值?罗马数字转换场景问题
Lua 动态键访问表的说明
核心结论
Lua支持使用变量作为键访问表,但是你提到的dictionary.var写法无法实现该需求:
- 点语法(
.)访问表成员时,会将后续标识符作为固定字符串键处理,dictionary.var等价于dictionary["var"],不会读取var变量的实际值 - 要使用变量的值作为键,必须使用方括号语法:
dictionary[var],运行时会先取var变量的值,再以该值为键访问表
基础示例
local dictionary = { I = 1, V = 5, X = 10 } local var = 'I' -- 正确用法,得到结果为1 local something = dictionary[var] -- 错误用法,等价于访问键为"var"的成员,结果为nil local wrong_result = dictionary.var
罗马数字转换代码修正
你当前代码中的symbols表为空,且没有处理罗马数字的减法规则(如IV代表4、IX代表9的场景),修正后可直接运行的代码如下:
local function Numeral(roman) local symbols = { I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000 } local sum = 0 local roman_len = #roman for i = 1, roman_len do local current_val = symbols[roman:sub(i,i)] -- 处理前位小于后位的减法逻辑 if i < roman_len and current_val < symbols[roman:sub(i+1,i+1)] then sum = sum - current_val else sum = sum + current_val end end return sum end print(Numeral('II')) -- 输出2 print(Numeral('IV')) -- 输出4 print(Numeral('MCMXCIV')) -- 输出1994
内容的提问来源于stack exchange,提问作者Landon Herron-James
相关产品推荐
相关产品推荐

