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

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

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

print(coroutine.status(co))
点赞
用户1270003
用户1270003

Lua 函数

Lua 中,函数的类型为 function。函数是第一类公民:头等函数(First-Class Function)

实际上,在内存中,函数只是一些包含一系列命令(类似于其他类型,如整数)的内存块。

2015-05-18 03:01:33
用户1442917
用户1442917

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

从它们的生命周期来看,它们和任何其他变量没有区别:如果该函数不再可达,它将在某个时候被垃圾回收。例如,该块内的函数 do local func = function() end end 不可从块外部访问并将被回收。

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

2015-05-18 03:14:41
用户2226988
用户2226988

你混淆了值和变量。值具有数据类型,如字符串、表格、函数等。在表达式上调用 type 函数以获取其类型。

变量引用值,但没有数据类型。你提到的全局、本地和表字段类别不是数据类型。

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

如其他地方所解释的(手册和注释),所有函数值都是匿名的,因此不是单独的类别。

值的生命周期始终从第一次评估它的时间直到没有变量引用它为止。

2015-05-18 17:07:09