GSmGpE6CwX2y9JjB25B8
我们使用此网站上的 Cookie 增强您的用户体验

Oct 18 2019, 3:01 PM PST 10 min

变量是一个可以用来保存值的名称。在 Lua 中,变量可以具有任何数据类型,例如Articles/Numbers|数字Articles/String|字符串

赋值

可使用 = Articles/Operators|运算符为变量赋值,如下所示:

x = 10
word = "Hello"

现在,变量 x 的值为 10,word 的值为字符串 “Hello”。如果打印出这些变量,会看到它们的值:

print(x)     --> 10
print(word)  --> Hello

只需为其重新赋值,便可更改变量:

n = 12
print(n)    --> 12

n = 24
print(n)    --> 24

尽管 n 的第一次赋值为 12,但被第二次赋值 24 所覆盖。
你也可以使用变量作为变量的赋值。

n = 78
x = n

print(x)   --> 78

x 的赋值为 n 时,它的值就变成了 n 的值。

script.Parent.Changed:connect(function()
var = script.Parent.Name           -- Change the path and property name as appropriate to what you need
end)

名称

为变量指定的名称只能包含字母(大写和小写)、数字或下划线 ( _ ),即你不应在变量名称中使用空格字符。它必须以下划线或字母开头,且不能是关键字(在编辑器中以蓝色高亮显示)。

LETTERS = "ABC"          -- valid
x86 = 1978               -- valid
var_name = "variable"    -- valid
_ = "blank"              -- valid

if = 12                  -- NOT valid!
16th = "Lincoln"         -- NOT valid!

多重赋值

Lua 允许你将多个值赋给多个变量。

a, b, c = 1, 2, 3

print(a, b, c)    --> 1 2 3

每个变量和每个值之间用逗号分隔。将 = 右边的值赋给左边相应的变量。第一个变量赋第一个值,第二个变量赋第二个值,以此类推。上述示例与此相同。你可以看到它节省了大量空间:

a = 1
b = 2
c = 3

print(a, b, c)    --> 1 2 3

调换

多重赋值非常有用,因为它允许你轻松地调换两个变量的值。

x, y = 8, 36
print(x, y)    --> 8 36

x, y = y, x
print(x, y)    --> 36 8

在此示例中,x 被赋值为 y 的初始值,y 被赋值为 x 的初始值。

变量作用域

scope-visual

有时你可能希望限制一个变量对另一个变量的访问。你可以通过将变量设置为仅对同一区域内的其他变量可见来实现。这些区域称为作用域
在普通 Lua 中,有两个作用域,称为全局本地

每个代码块都有自己的作用域。由于代码块可以嵌套,因此每个作用域都可能有一个外部作用域和一个内部作用域

  • 内部作用域是当前作用域的“子级”。当前作用域无法访问内部作用域中的变量。
  • 外部作用域是当前作用域的“父级”。当前作用域可以访问外部作用域中的任何变量。

全局变量

全局变量是指对脚本的所有作用域均可见的变量(不要与向 “_G” 或“共享”表中添加变量相混淆,这些表由不同脚本共享)。

a = 1
if true then
    print(a)        --> 1
    if true then
        a = 2
        print(a)    --> 2
    end
    print(a)        --> 2
end
print(a)            --> 2

所有变量都默认为全局变量,除非它们被声明为本地变量(解释如下)。

本地变量

本地变量是指仅可由同一作用域内的其他对象访问的变量。在变量前添加关键词本地,变量就变成了本地变量。的确,本地变量相比普通变量更易获取。这是因为它们被集成到当前的创建环境中。

local word = "Hello"

本地变量对其外部作用域中的对象不可见。

if true then    -- a new block is created
    local b = 2
end
print(b)        --> nil

但它们对其内部作用域中的对象可见。

local b = 2
if true then
    print(b)    --> 2
end

如果变量的名称与其外部作用域中的变量名称相同,则外部作用域的值将在内部作用域(而不是外部作用域)中被覆盖。

a = 1
if true then
    local a = 2
    print(a)      --> 2
end
print(a)          --> 1

共享变量

shared-variables2

在 Roblox Lua 中,存在第三种变量,称为共享变量。共享变量是指对每个脚本均可见的变量(即,它们由所有脚本共享)。共享变量的一些示例包括 print()gameInstance

请注意,普通 Lua 和 Roblox Lua 之间存在一些主要差异。

  • 在普通 Lua中,这些变量被视为全局变量,因为它们在全局作用域内完全可见。
  • 在 Roblox Lua 中,这些变量已经从全局作用域中分离出来,因为 Roblox 使用多个脚本,每个脚本都有自己的 Articles/Scope
  • 在 Roblox Lua 中,出于安全原因,这些变量不可修改。

实践