【问题标题】:Lua more than one locals in one lineLua 多个本地人在一条线上
【发布时间】:2017-02-25 09:12:46
【问题描述】:

假设我们有以下代码:

local x = 1
local x, y = 2, 3

我知道x 在第二行之后会变成 2,但是那一行的本地是创建一个新的x,还是使用之前的那个?

【问题讨论】:

    标签: lua local-variables


    【解决方案1】:

    它们将是两个不同的本地值:第一个将被隐藏并且不可访问,因为第二个是在同一个块中以相同的名称创建的。以下是luac -l -l (Lua 5.3) 为该脚本显示的信息:

    main <local.lua:0,0> (4 instructions at 00697ae8)
    0+ params, 3 slots, 1 upvalue, 3 locals, 3 constants, 0 functions
        1   [1] LOADK       0 -1    ; 1
        2   [2] LOADK       1 -2    ; 2
        3   [2] LOADK       2 -3    ; 3
        4   [2] RETURN      0 1
    constants (3) for 00697ae8:
        1   1
        2   2
        3   3
    locals (3) for 00697ae8:
        0   x   2   5
        1   x   4   5
        2   y   4   5
    upvalues (1) for 00697ae8:
        0   _ENV    1   0
    

    locals 部分显示三个变量,其中两个 x 具有相同的范围结束位置。

    【讨论】:

    • 也就是说,这是一个很糟糕的设计,在这种情况下简单地覆盖之前的本地。
    • 这个设计很简单,有它的优点;我认为这种情况很少发生,足以在语言设计期间担心这种情况。
    • 我并不是说 Lua 的设计不好,我的意思是编码器端。如果这是他们覆盖本地人的方式,那么他们做得非常糟糕。
    • @warspyking 覆盖并没有太大的改进。你最终仍然会得到 x ,在某一点表示一件事,然后再表示另一件事。有了有意义的命名,人们很少会为一个变量赋值两次。
    • @tom blodget 每个小的优化都很重要,而且学习正确的脚本编写实践也很好。
    猜你喜欢
    • 2011-03-11
    • 2014-08-12
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    相关资源
    最近更新 更多