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

问题描述 投票:0回答:2

我有一个具有以下

__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"

我能以某种方式完成这个任务吗?

error-handling lua
2个回答
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

0
投票

我正在尝试绕过http ddos,请帮助我,我被卡住了,没有不良来源规则@julien-desgats,谢谢你,我非常喜欢你!

© www.soinside.com 2019 - 2024. All rights reserved.