在Lua参考手册中,它说每个值都有一个类型,可能是本地,全局,表字段类型之一。我的问题是Lua中匿名函数的类型是什么?匿名函数有什么生命周期?我只是举个例子。
local co = coroutine.create( function () print "hi" end )
print(coroutine.status(co))
答案 0 :(得分:5)
我认为这里有一些概念。正如其他人已经说过的那样,Lua只有匿名函数,其类型为function
(type(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
在实际内存中,该函数只是一些包含命令集的内存块(类似于任何其他类型,例如整数)