在Lua中,使用和不使用“local”关键字声明的本地函数之间是否存在差异?

在Lua中,使用和不使用“local”关键字声明的本地函数之间是否存在差异?,第1张

概述前言:据我所知,网站上的文档并没有真正说明这一点,我甚至没有找到其他人提问,所以我很确定这两种形式是相同的,但我想要知道是否有人确切知道. 鉴于此Lua代码: function f() function a() ... end local function b() ... end ...end a()和b()之间是否有任何功能差异?我说的是性能,访问,警告,任何事情.最后 前言:据我所知,网站上的文档并没有真正说明这一点,我甚至没有找到其他人提问,所以我很确定这两种形式是相同的,但我想要知道是否有人确切知道.

鉴于此Lua代码:

function f()    function a() ... end    local function b() ... end    ...end

a()和b()之间是否有任何功能差异?我说的是性能,访问,警告,任何事情.最后,他们在运行时是否都具有完全相同的底层表示?

我怀疑没有任何区别,但我不确定,这让我感到困扰.我知道a()的作用域是封闭函数f(),但是我不确定它是否真正使它成为局部变量的根本功能.用b(),我可以肯定.

我们从官方文档中了解到,我对上面b()的定义是语法糖:

local b    b = function() ... end

我很想相信,即使我的定义中没有local关键字,a()的最终去糖定义也将完全遵循该格式,包括本地部分.

我觉得我不能假设这一点.

解决方法 函数a()结束在代码块中,当函数运行时指定全局a *,而b保持函数的本地.

也许这段代码会更好地说明事情:

function f()    function a() end    local function b() endendprint(a,b) -- nil,nilf()print(a,b) -- function: 0xdeadbeef,nil

因此,为避免污染全局环境,您仍应使用函数内部的本地.

*除非你在f之上的其他范围内声明了本地,否则a将保持其范围.

总结

以上是内存溢出为你收集整理的在Lua中,使用和不使用“local”关键字声明的本地函数之间是否存在差异?全部内容,希望文章能够帮你解决在Lua中,使用和不使用“local”关键字声明的本地函数之间是否存在差异?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228236.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存