【问题标题】:Is there a way to put local functions in any order in Lua? [duplicate]有没有办法在 Lua 中按任何顺序放置本地函数? [复制]
【发布时间】:2017-04-25 12:35:33
【问题描述】:

Lua 与我习惯使用的语言不同之处在于,将变量和函数声明放入的顺序很重要。在函数中,您不能访问在函数之后声明的局部变量.例如:

local function foo()
 return bar
end
local bar = 4
print(foo()) -- prints nil instead of 4

如果您尝试从之前声明的函数访问本地函数,情况也是如此。

在某些情况下,如果您只注意以正确的顺序声明事物,这一切都可以解决。但是,如果您有两个或多个需要相互调用的函数怎么办?函数必须是全局的,还是有一些方法可以用局部函数来做到这一点?

【问题讨论】:

    标签: function lua declaration definitions


    【解决方案1】:

    好的,我解决了。这只是在定义事物之前声明事物的问题。我不确定它是否适用于函数,但我应该知道。

    local foo, bar
    function foo(a)
     print 'foo'
     if a == 3 then
      bar(4)
     end
    end
    function bar(b)
     print 'bar'
     if b == 4 then
      foo(2)
     end
    end
    foo(3)
    -- foo
    -- bar
    -- foo
    

    【讨论】:

    • 哦!在测试了这段代码后,我了解到带有标识符的函数并不总是全局声明的。
    • 标识符是什么意思?
    • 有效标识符名称 —> abfoobar
    • 好的,但是范围只适用于变量,对吧?并且函数标识符与 Lua 中的变量完全相同。将匿名函数视为本地函数或全局函数是没有意义的,不是吗?
    • 我没有这么说,我的意思是我认为这样声明的函数 —> function foo() end 将被全局声明,而 local function foo() end 将生成一个本地函数,但如果有一个名称为foofunction foo() end 的本地将分配它有权访问的最后一个名为foo 的本地。所以,这就是我不知道的
    猜你喜欢
    • 2010-09-26
    • 2020-10-05
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多