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

时间:2015-05-18 02:48:22

标签: lua

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

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

print(coroutine.status(co))

3 个答案:

答案 0 :(得分:5)

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

就其生命周期而言,它们与任何其他变量没有区别:如果该函数不再可访问,则在某些时候将对其进行垃圾回收。例如,此块do local func = function() end end内的函数无法从块外部访问,将被收集。

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

答案 1 :(得分:1)

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

变量引用值但没有数据类型。您要引用的类别:全局,本地和表字段不是数据类型。

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

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

值的生命周期始终从它首次计算的时间开始,直到没有变量引用它为止。

答案 2 :(得分:0)

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

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