lua函数引用可以用作表键吗?

Viv*_*vek 5 lua reference key function lua-table

这是一个Lua新手.我可以将函数引用存储为Lua表中的键吗?与此类似的东西:

local fn = function() print('hello') end
local my_table = {}
my_table[fn] = 123
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,但我不知道我是否可以依赖函数引用的唯一性.Lua可以在超出范围时重用函数引用吗?这会产生任何问题,还是由于某种原因被认为是不好的做法?

hjp*_*r92 6

是啊.我在lua遇到过的最好的事情之一是作为引用属性的东西.

key在桌面上使用s 的方式没有任何问题.

来自Lua PiL

Lua中的表既不是值也不是变量; 它们是对象.您可以将表视为动态分配的对象; 你的程序只操纵它们的引用(或指针).幕后没有隐藏的副本或新表的创建.

在您的示例中,您尚未向函数传递任何参数,因此基本上,在您的情况下,在程序中将函数作为引用将毫无用处.另一方面,这样的事情:

fn1 = function(x) print(x) end
fn2 = function(x) print("bar") end
t[fn1] = "foo"
t[fn2] = "foo"
for i, v in pairs(t) do i(v) end
Run Code Online (Sandbox Code Playgroud)

确实有它的用途.

Lua可以在超出范围时重用函数引用吗?

只要你的父表在范围内,是的.由于表是创建和操作但未复制的,因此不可能从表索引内存中弃用函数引用.我会在实际尝试之后编辑这个答案.

这会产生任何问题,还是由于某种原因被认为是不好的做法?

它只是被认为是不好的做法,因为用户熟悉其他语言,如C,python等往往读表时有阵记在心里.在你没有这样的担忧,程序将完美无缺.

我不知道我是否可以依赖函数引用的唯一性.

为什么?

  • @BackinaFlash一般不是真的.5.1官方翻译就是如此; 但不是5.2.我认为这取决于个人的实施. (2认同)