lua - lua 5.1 如何使用 loadstring 调用不在全局命名空间中且需要参数的函数
问题描述
试图创建一个包装函数来调用各种验证函数。验证函数不在全局命名空间中,它们需要参数。我正在使用 Lua 5.1 并试图让 loadstring() 函数工作但没有任何运气。
-- wrapper function
local function validateField(funcName, funcArg, errorTable)
local vres
local functionCall = loadstring("return " .. funcName .. "(...)")
vres = functionCall(funcArg)
if vres~=true then
table.insert(errorTable, vres)
return false
end
return true
end
调用代码:
local result = validateField("valid.nameField" , data.name, errors)
解决方案
如果你只想调用一个函数,给它一些参数,然后检查返回值,那么你根本不需要使用loadstring
。只需将函数作为参数传递给validateField
.
local function validateField(errorTable, func, ...)
local res = func(...);
if res ~= true then
table.insert(errorTable, res)
return false
end
return true
end
然后适当地调用它(注意我改变了参数的顺序):
local result = validateField(errors, valid.nameField, data.name)
推荐阅读
- javascript - 如何防止自定义框模态在单击外部或按退出时消失
- ruby-on-rails - 如果标记为销毁的嵌套属性不存在,则不要引发 ActiveRecord::RecordNotFound
- java - 在服务器端验证文件
- python - 熊猫数据框适用于日期时间列:不起作用
- r - 按固定日期范围聚合 R
- arrays - 如何在减去 2 行的同时计算行之间的差异 | 谷歌电子表格
- python - 根据日期 Python 组合 Pandas DataFrames
- html - 我应该在 json 和 html 解析器上阅读什么来自己构建一个?
- angular - 更新到 Angular 9 后构建项目导致错误“无法读取未定义的属性‘长度’
- javascript - 我们可以在 react native expo 项目中使用 react native (npm) 包吗