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 字段引用函数。
如其他地方(手册和评论)所述,所有函数值都是匿名的,因此不是一个单独的类别。
一个值的生命周期总是从它被第一次计算到没有变量引用它为止。
在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 字段引用函数。
如其他地方(手册和评论)所述,所有函数值都是匿名的,因此不是一个单独的类别。
一个值的生命周期总是从它被第一次计算到没有变量引用它为止。