Lua中命名函数与匿名函数之间有哪些本质差异,导致它们在应用场景和性能上存在显著不同?

2026-04-01 19:381阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计494个文字,预计阅读时间需要2分钟。

Lua中命名函数与匿名函数之间有哪些本质差异,导致它们在应用场景和性能上存在显著不同?

这些myFuncs之间有以下区别:

Lua中命名函数与匿名函数之间有哪些本质差异,导致它们在应用场景和性能上存在显著不同?

1. 第一个代码块使用了函数表达式(匿名函数)的方式定义myFunc,并且没有显式地返回函数。

2.第二个代码块定义了一个名为myFunc的函数,并将其赋值给变量myFunc,这是一个函数声明的方式。

具体代码如下:

代代码1:

luafunction wrapper() local someVariable=0 function myFunc(n) if n==0 then return myFunc(n - 1) end end return myFuncend

代代码2:luafunction wrapper() local someVariable=0 local myFunc=function(n) return myFunc(n - 1) end return myFuncend

这些myFuncs之间有什么区别?

代码1

function wrapper() local someVariable = 0; function myFunc(n) if n > 0 then return myFunc(n-1) end end return myFunc; end

代码2

function wrapper() local someVariable = 0; local myFunc = function(n) if n > 0 then return myFunc(n-1) end end return myFunc; end

代码3

function wrapper() local someVariable = 0; local myFunc; myFunc = function(n) if n > 0 then return myFunc(n-1) end end; return myFunc; end

因为当我在myFunc本身中引用函数名myFunc时.他们的行为不一样. (例如,upvalue someVariable ……有问题:-S)

[编辑:我误读了你的代码#2.]

代码#1将myFunc的全局值设置为函数.因此,每次调用包装器时,您都会将此全局设置为新值.此外,对myFunc调用的任何引用都将是对此全局(可修改),而不是对本地(对于闭包的升值).

代码#2设置局部变量myFunc.但是,由于Lua的规则,该局部变量仅在定义它的语句完成后才进入范围.这允许你做这样的事情:

local x = x or 5

表达式中的x是先前声明的本地或全局.在评估x或5表达式之前,新x不会进入范围.

您的功能定义也是如此.因此,对myFunc的任何引用都将是一个全局变量,而不是本地变量.

代码#3创建一个局部变量myFunc.然后它将该变量设置为一个函数.因为函数是在局部变量进入范围之后创建的,所以函数中对myFunc的引用将引用局部变量,而不是全局变量.

注意,局部函数X相当于局部X; X =功能….不是本地X =功能….

本文共计494个文字,预计阅读时间需要2分钟。

Lua中命名函数与匿名函数之间有哪些本质差异,导致它们在应用场景和性能上存在显著不同?

这些myFuncs之间有以下区别:

Lua中命名函数与匿名函数之间有哪些本质差异,导致它们在应用场景和性能上存在显著不同?

1. 第一个代码块使用了函数表达式(匿名函数)的方式定义myFunc,并且没有显式地返回函数。

2.第二个代码块定义了一个名为myFunc的函数,并将其赋值给变量myFunc,这是一个函数声明的方式。

具体代码如下:

代代码1:

luafunction wrapper() local someVariable=0 function myFunc(n) if n==0 then return myFunc(n - 1) end end return myFuncend

代代码2:luafunction wrapper() local someVariable=0 local myFunc=function(n) return myFunc(n - 1) end return myFuncend

这些myFuncs之间有什么区别?

代码1

function wrapper() local someVariable = 0; function myFunc(n) if n > 0 then return myFunc(n-1) end end return myFunc; end

代码2

function wrapper() local someVariable = 0; local myFunc = function(n) if n > 0 then return myFunc(n-1) end end return myFunc; end

代码3

function wrapper() local someVariable = 0; local myFunc; myFunc = function(n) if n > 0 then return myFunc(n-1) end end; return myFunc; end

因为当我在myFunc本身中引用函数名myFunc时.他们的行为不一样. (例如,upvalue someVariable ……有问题:-S)

[编辑:我误读了你的代码#2.]

代码#1将myFunc的全局值设置为函数.因此,每次调用包装器时,您都会将此全局设置为新值.此外,对myFunc调用的任何引用都将是对此全局(可修改),而不是对本地(对于闭包的升值).

代码#2设置局部变量myFunc.但是,由于Lua的规则,该局部变量仅在定义它的语句完成后才进入范围.这允许你做这样的事情:

local x = x or 5

表达式中的x是先前声明的本地或全局.在评估x或5表达式之前,新x不会进入范围.

您的功能定义也是如此.因此,对myFunc的任何引用都将是一个全局变量,而不是本地变量.

代码#3创建一个局部变量myFunc.然后它将该变量设置为一个函数.因为函数是在局部变量进入范围之后创建的,所以函数中对myFunc的引用将引用局部变量,而不是全局变量.

注意,局部函数X相当于局部X; X =功能….不是本地X =功能….