【发布时间】:2014-07-09 09:07:30
【问题描述】:
我有一个函数 foo 在某些情况下可以获得 nil 值,即 foo(VarA) 而 VarA 未定义。这个未定义的VarA 应该被解释为"VarA",但我不能调用foo("VarA"),因为VarA 应该作为一个选项参数(不同于普通的字符串参数)。
mt = {__index = function(t, k) return k end}
setmetatable(_G, mt)
这将获得所需的结果,但现在所有其他未定义的变量都将返回其名称。喜欢abc -> "abc"。您是否看到在这种特定情况下仅激活元表的任何方法?我可以在 foo 方法中切换元表,但是当我在 foo 块中时,传递的参数已经为零,为时已晚。
附录:我认为这个问题不够具体。 Schollii 将参数作为表格传递的答案很好,但没有按预期工作:
foo({option1 = delete, option2 = push})
这应该有键信息(选项1和选项2)加上值的信息(即使删除和推送在全局或本地命名空间中不存在)。 Schollii 的方法会给我关键信息而不是价值信息(如“删除”和“推送”)。我不能预先定义删除和推送,因为这些新的“关键字”应该稍后由函数本身定义。将这些新关键字作为字符串传递是没有选择的。
【问题讨论】:
-
函数内部,做
local varA = varA or 'varA' -
用相应的
foo("VarA")替换所有像foo(VarA)这样的调用,并在函数foo(var) 的开头插入这一行:var = _G[var] or var -
Lua 没有未定义变量的概念。你的意思是全球性的吗?
标签: lua lua-table metatable meta-method