lua-check 之类的一些工具,发现拼写错误
some tools like lua-check, found out spelling wrong
脚本语言不用编译成exe就好,但经常拼写错误,赞
T.abc = 10
书面
T.abd = 10
ABC是T中的一个table变量,导致t.abc
赋值不正确
一些更极端的情况,
测试中未发现错误t.abd = 10
但在产品发布时发现
工具是否支持这种语法
Lua-inspect should be able to detect unknown table fields based on dynamic evaluation: "identifies unknown global variables (white-on-red) and table fields (red), inferred by static and dynamic evaluation". TypedLua 也应该这样做,尽管它可能会生成比 Lua-inspect 在同一脚本上更详细的输出。
您可以使用元table 拦截table 访问。试试这个:
local function test(t,k)
if t[k]==nil then
error("invalid field "..k)
end
end
local function newtable(fields)
return setmetatable({},{
__index=function (t,k) test(fields,k) end,
__newindex=function (t,k,v) test(fields,k) rawset(t,k,v) end
})
end
T=newtable({ abc=true, xyz=true})
print(T.abc)
T.abc = 10
print(T.abc)
T.acb = 10
print(T.acb)
脚本语言不用编译成exe就好,但经常拼写错误,赞
T.abc = 10
书面
T.abd = 10
ABC是T中的一个table变量,导致t.abc
赋值不正确
一些更极端的情况,
测试中未发现错误t.abd = 10
但在产品发布时发现
工具是否支持这种语法
Lua-inspect should be able to detect unknown table fields based on dynamic evaluation: "identifies unknown global variables (white-on-red) and table fields (red), inferred by static and dynamic evaluation". TypedLua 也应该这样做,尽管它可能会生成比 Lua-inspect 在同一脚本上更详细的输出。
您可以使用元table 拦截table 访问。试试这个:
local function test(t,k)
if t[k]==nil then
error("invalid field "..k)
end
end
local function newtable(fields)
return setmetatable({},{
__index=function (t,k) test(fields,k) end,
__newindex=function (t,k,v) test(fields,k) rawset(t,k,v) end
})
end
T=newtable({ abc=true, xyz=true})
print(T.abc)
T.abc = 10
print(T.abc)
T.acb = 10
print(T.acb)