【问题标题】:Local variables in global scope Lua全局范围内的局部变量 Lua
【发布时间】:2017-03-05 14:54:37
【问题描述】:

假设我有一个 lua 文件,在顶部,我在任何函数之外定义了一个变量,但我称之为本地

local x = 1

本地 x 和全局 x 之间有什么区别吗?

【问题讨论】:

  • 您不能真正在函数之外定义变量,因为脚本被编译为function body

标签: lua scope global local love2d


【解决方案1】:

是的,因为它是创建它的 chunk 的本地地址。

Lua 将块处理为具有可变数量参数的匿名函数的主体(参见第 3.4.11 节)。因此,块可以定义局部变量、接收参数和返回值。此外,这种匿名函数被编译为在一个名为 _ENV 的外部局部变量的范围内(参见第 2.2 节)。结果函数始终将 _ENV 作为其唯一的上值,即使它不使用该变量。

考虑这个例子:

-- main.lua
require 'other'
print(x, y)

-- other.lua
local x = 5
y = 10

这将打印出nil, 10,因为x 的本地,而y 被分配为upvalue 用于任何一个环境 已加载。

另见:

注意 environments 的语义在 Lua5.1 和 Lua5.2 之间发生了变化:

【讨论】:

    猜你喜欢
    • 2016-11-13
    • 1970-01-01
    • 2013-07-13
    • 2013-12-25
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    相关资源
    最近更新 更多