在__newindex函数内部报告错误,而不是在__newindex调用的源头报告错误。

我有一个带有以下__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"

的地方。我能以某种方式实现这个吗?

点赞
用户2328533
用户2328533

你可以使用 error 函数并给 level 参数:

__newindex = function(t, key, value)
  local ok, err = pcall(set_value, t.sprite_number, key, value)
  -- level 2 表示错误将被传递到第二层堆栈框架,
  -- 即设置键的行
  if not ok then error(err, 2) end
end
2013-12-08 11:27:09