当稍后声明函数时,如何在 lua table 中将函数作为字段值?
How to have function as field value in a lua table, when the function is declared at a later point?
我有以下情况,其中代码的位置不应更改。如何修改此代码以在不移动函数和 table 变量的情况下修复错误。我是Lua新手,才4天
function a()
print("function a");
end
ftable = {
["a"] = a,
["b"] = b
};
function b()
print("function b");
end
ftable["a"](); -- prints 'function a'
ftable["b"](); -- attempt to call field 'b' (a nil value)
更新:使用以下机制可以做到这一点。
function a()
print("function a");
end
ftable = {
["a"] = a,
["b"] = "b"
};
function b()
print("function b");
end
ftable["a"](); -- prints 'function a'
_G[ftable["b"]]();
你不能那样做。 Lua 中没有声明,只有定义。使用前需要先定义变量。
你可以做的是在ftable
中注册函数的名称,然后在使用它们之前固定值:
ftable = {
["a"] = true,
["b"] = true,
}
...
for k,v in pairs(ftable) do ftable[k]=_G[k] end
此代码假定您的函数是全局定义的。
Lua的table声明和函数定义(以及函数调用语法)非常灵活。您可以使用字段键作为标识符而不是索引语法,前提是该键是字符串并且也是有效的标识符({ a = a }
和 ftable.a()
)。您的 a
和 b
键似乎就是这种情况。也可以用函数定义语句(function ftable.b
…).
进行字段赋值
function a()
print("function a")
end
ftable = {
a = a
}
function ftable.b()
print("function b")
end
ftable.a() -- prints 'function a'
ftable.b() -- prints 'function b'
当然,你也可以把"function a"下移,像"function b"一样编码。这将使 ftable = { }
位于顶部。
与您的代码有一处不同。全局变量 b
不再设置为函数。在大多数情况下,这将被视为一种优势。
我还要再重申一下,
There are no declarations in Lua, only definitions.
函数定义(在一般情况下)是一个表达式。评估时,它会产生一个函数值。各种类型的语句都可以将值赋给变量或字段,function ftable.b()
….
我有以下情况,其中代码的位置不应更改。如何修改此代码以在不移动函数和 table 变量的情况下修复错误。我是Lua新手,才4天
function a()
print("function a");
end
ftable = {
["a"] = a,
["b"] = b
};
function b()
print("function b");
end
ftable["a"](); -- prints 'function a'
ftable["b"](); -- attempt to call field 'b' (a nil value)
更新:使用以下机制可以做到这一点。
function a()
print("function a");
end
ftable = {
["a"] = a,
["b"] = "b"
};
function b()
print("function b");
end
ftable["a"](); -- prints 'function a'
_G[ftable["b"]]();
你不能那样做。 Lua 中没有声明,只有定义。使用前需要先定义变量。
你可以做的是在ftable
中注册函数的名称,然后在使用它们之前固定值:
ftable = {
["a"] = true,
["b"] = true,
}
...
for k,v in pairs(ftable) do ftable[k]=_G[k] end
此代码假定您的函数是全局定义的。
Lua的table声明和函数定义(以及函数调用语法)非常灵活。您可以使用字段键作为标识符而不是索引语法,前提是该键是字符串并且也是有效的标识符({ a = a }
和 ftable.a()
)。您的 a
和 b
键似乎就是这种情况。也可以用函数定义语句(function ftable.b
…).
function a()
print("function a")
end
ftable = {
a = a
}
function ftable.b()
print("function b")
end
ftable.a() -- prints 'function a'
ftable.b() -- prints 'function b'
当然,你也可以把"function a"下移,像"function b"一样编码。这将使 ftable = { }
位于顶部。
与您的代码有一处不同。全局变量 b
不再设置为函数。在大多数情况下,这将被视为一种优势。
我还要再重申一下
There are no declarations in Lua, only definitions.
函数定义(在一般情况下)是一个表达式。评估时,它会产生一个函数值。各种类型的语句都可以将值赋给变量或字段,function ftable.b()
….