我有以下__newindex
函数:
__newindex = function(t, key, value)
set_value(t.sprite_number, key, value)
end
这允许我允许用户在我的lua对象上设置“属性”(有一个相应的__index
函数,但它并不真正相关)。
set_value
是一个C函数。如果您尝试在“属性”上设置错误的类型,例如在整数属性上设置字符串值,则C代码
luaL_error (l, "property must be a number");
除了从lua报告的错误
之外,这种方法很好[string "-- init.lua..."]:10: property must be a number
这是指我的__newindex函数中的set_value函数调用。这不是很有帮助。我希望错误指向设置错误值的地方,即在你所在的地方
object.property = "expects integer"
我可以以某种方式完成此事吗?
答案 0 :(得分:5)
您可以使用error功能并提供level
参数:
__newindex = function(t, key, value)
local ok, err = pcall(set_value, t.sprite_number, key, value)
-- level 2 means that the error will be signaled on 2nd stack frame,
-- that is the line at which the key has been set
if not ok then error(err, 2) end
end