Lua 中匿名函数的类型是什么?

What's the type of the anonymous function in Lua?

在Lua参考手册中,它说每个值都有一个类型,可能是局部、全局、table字段类型之一。我的问题是 Lua 中匿名函数的类型是什么?匿名函数有什么生命周期?我只是举个例子。

local co = coroutine.create( function () print "hi" end )

print(coroutine.status(co))

函数的类型为 function。在Lua中,函数首先是class公民:First-Class Function

在实际内存中,函数只是一些包含命令集的内存块(类似于任何其他类型,例如整数)

我认为这里有一些概念的混合。正如其他人已经说过的,Lua 只有匿名函数,其类型为 function (type(function() end) == 'function')。这些匿名函数可以赋值给变量,然后变量可以用来调用函数;这些被方便地用作函数的 "names",但它们实际上是存储类型 "function".

值的变量的名称

就它们的生命周期而言,它们与任何其他变量没有什么不同:如果函数不再可达,它会在某个时间点被垃圾回收。例如,此块 do local func = function() end end 内的函数无法从块外部访问,将被收集。

您显示的示例创建了一个协程,它接受一个函数并创建一个 thread 类型的值:type(coroutine.create(function() end)) == "thread"。这些协程可能处于不同的状态,它们的状态由 coroutine.status 函数返回;在你的情况下它将是 "suspended".

您混淆了值和变量。值具有字符串、table、函数等数据类型。对表达式调用 type 函数以获取其类型。

变量引用值但没有数据类型。您所指的类别:全局、本地和 table 字段不是数据类型。

这些概念是正交的。例如:一个本地值可以是任何数据类型;可以通过全局、局部或 table 字段引用函数。

如其他地方(手册和评论)所述,所有函数值都是匿名的,因此不是一个单独的类别。

一个值的生命周期总是从它被第一次计算到没有变量引用它为止。