Luau globals

显示已弃用

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

以下是 Luau 的本地函数和变量列表。这些函数可以在标准安装中使用 LuauLua 5.1.4 的一部分,虽然这些功能在 Roblox 上的工作方式有一些不同。

概要

职能

  • assert(value : Variant,errorMessage : string):Variant

    如果提供的 value 解析为 falsenil,将抛出错误。

  • error(message : Variant,level : number):()

    停止线程执行并抛出错误。

  • 返回总计内存堆尺寸以千字节。

  • getmetatable(t : Variant):Variant

    返回给定表的可表达式。

  • 返回迭代器函数和表,用于在 for 循环中使用。

  • loadstring(contents : string,chunkname : string):Variant

    返回提供的代码作为可以执行的函数。

  • newproxy(addMetatable : boolean):userdata

    创建一个空白 userdata , 带有可选选项让它有一个可表示的表。

  • next(t : table,lastKey : Variant):Variant,Variant

    用于循环的迭代器函数。

  • 返回迭代器函数和提供的表,用于 for 循环中使用。

  • pcall(func : function,args : Tuple):boolean,Variant

    运行提供的函数,并捕获它投掷的任何错误,返回函数的成功和其结果。

  • print(params : Tuple):()

    将所有提供的值打印到输出。

  • rawequal(v1 : Variant,v2 : Variant):boolean

    返回 whether v1 是否等于 v2 , 通过其超级方法忽略它们。

  • rawget(t : table,index : Variant):Variant

    获取 table[index] 的真实值,无视任何超级方法。

  • 返回字符串或表的长度,无视任何超级方法。

  • rawset(t : table,index : Variant,value : Variant):table

    设置 table[index] 的真实值,无视任何超级方法。

  • require(module : ModuleScript | string | number):Variant

    返回由给定的模块脚本返回的值,如果尚未运行,则运行它。

  • select(index : Variant,args : Tuple):Tuple

    返回给定索引后的所有参数。

  • setmetatable(t : table,newMeta : Variant):table

    设置给定表的可访问表。

  • tonumber(arg : Variant,base : number):Variant

    返回提供的值转换为数字,或 nil 如果不可能。

  • tostring(e : Variant):string

    返回提供的值转换为字符串,或 nil 如果不可能。

  • type(v : Variant):string

    返回提供的对象的基本类型。

  • unpack(list : table,i : number,j : number):Variant

    返回给定列表中的所有元组素为 tuple。

  • xpcall(f : function,err : function,args : Tuple):boolean,Variant

    pcall() 类似,但使用了自定义错误处理器。

属性

  • 一个表,它被分享到同一等级别上下文的所有脚本。

  • 一个全球变量,包含包含当前编译器版本的字符串。

职能

assert

Variant

如果提供的 valuefalsenil,将抛出错误。如果声明通过,它将返回所有传给它的值。


local product = 90 * 4
assert(product == 360, "Oh dear, multiplication is broken")
-- The line above does nothing, because 90 times 4 is 360

参数

value: Variant

将对抗的值。

errorMessage: string

如果主张失败,将在错误中显示的文本。

默认值:assertion failed!

返回

Variant

error

()

终止最后一个被保护的函数调用并输出 message 作为错误信息。如果包含错误的函数没有被调用到保护函数,例如 pcall() ,那么调用该函数的脚本将终止。错误函数本身永远不会返回并像脚本错误一样行动。

level 参数指定如何获取错误位置。使用等级 1 (默认值),错误位置是错误函数被调用的地方。等级 2 将错误指向错误调用的函数所在位置;以及如此。通过等级 0 避免将错误位置信息添加到消息中。

参数

message: Variant

要显示的错误消息。

level: number

应打印的信息级别。默认为 1。

默认值:1

返回

()

gcinfo

返回总计内存堆尺寸以千字节。该数字反映了操作系统的当前堆消耗,随着垃圾收集器释放对象而波动。

返回

getmetatable

Variant

返回指定表的 metatable t 如果它有一个,否则返回 nil .如果 t 有一个可转换表,且 __metatable 的 metamethod 被设置,它会返回这个值而不是它。


-- 展示 getmetatable:
local meta = {}
local t = setmetatable({}, meta)
print(getmetatable(t) == meta) --> 真实
-- 通过设置 __metatable 元方法来使原始可恢复不可恢复:
meta.__metatable = "protected"
print(getmetatable(t)) --> protected

参数

t: Variant

用于获取表单的对象。

返回

Variant

ipairs

返回三个值:迭代器函数、表 t 和数字 0 。每次调用迭代器函数时,它都会返回表中的下一个数字索引值对。在通用 for 循环中使用时,返回值可用于在表中循环每个数字索引:


local fruits = {"apples", "oranges", "kiwi"}
for index, fruit in ipairs(fruits) do
print(index, fruit) --> 1 个苹果、2 个橙子、3 个柑橘等……
end

参数

一个包含要循环的元素的表。

loadstring

Variant

从字符串加载 Luau 代码,并将其返回为函数。

与标准 Lua 5.1 不同,Roblox 的 Luau 无法使用 loadstring() 加载编译的 bytecode。

loadstring() 默认被禁用。要启用它的指导,请参阅 ServerScriptService

警告: 这个方法会禁用返回函数上的某些 Luau 优化。在使用 loadstring() 时,应采取极其谨慎的措施;如果你的意图是允许用户在你的体验中运行代码,请确保使用 getfenv()setfenv() 来保护返回的函数的环境。

参数

contents: string

指定要加载为 Luau 代验证码的字符串。

chunkname: string

可选的错误信息和调试信息块名称。如果未指定,Luau 使用 contents 字符串。

返回

Variant

newproxy

创建一个空白 userdata , 带有可选选项让它有一个可表示的表。

参数

addMetatable: boolean
默认值:false

返回

返回迭代器函数、传递的表 tnil , 使建筑在使用通用 for 循环时遍历该表的所有键/值对:


local scores = {
["John"] = 5,
["Sally"] = 10
}
for name, score in pairs(scores) do
print(name .. " has score: " .. score)
end

参数

一个需要循环的阵列或字典表。

pcall

在保护模式下调用函数 func ,使用给定的参数。这意味着任何内部错误 func 不会传播;相反,pcall() 捕获错误并返回状态代验证码。其第一个结果是状态代码(一个 boolean),如果调用成功且没有错误,它将为真。在这种情况下,pcall() 也返回调用后的所有结果,在这个第一个结果之后。在任何错误情况下,pcall()返回错误信息加上 false。

参数

func: function

在保护模式下调用的函数。

args: Tuple

在执行时发送到 func 的参数。

返回

Variant

print

()

接收任何数量的参数,并将其值打印到输出。print 不适用于格式化输出,但仅作为快速显示值的方法,通常用于调试。对于格式化输出,请使用 string.format() 。在 Roblox 上,print 不调用 tostring ,但如果表有一个,__tostring 的 metamethod 仍会发射。

参数

params: Tuple

要输出的任何数量的参数。

返回

()

rawequal

检查 v1 是否等于 v2 , 而不需要调用任何超级方法。

参数

v1: Variant

要比较的第一个变量。

v2: Variant

要比较的第二个变量。

返回

rawget

Variant

获取 table[index] 的真实值,而不需要调用任何超级方法。

参数

要参考的表。

index: Variant

t 获取索引。

返回

Variant

rawlen

返回字符串或表的长度,而不需要调用任何超级方法。

参数

要参考的表。

返回

rawset

table[index] 的实际值设置为给定的 value ,而不需要调用任何代理方法。

参数

要参考的表。

index: Variant

t 设置指标到指定的 value 。必须与 nil 不同。

value: Variant

值将设置为表中指定的 index 在表 t 中。

返回

require

Variant

运行提供的 ModuleScript 并返回 ModuleScript 返回的内容 (通常是表或函数)。如果 ModuleScript 尚未运行,它将被执行。

如果提供了一个字符串路径,它首先解决为与调用 ModuleScript 脚本相关的 require() ,模仿 Luau 的 require() 语句的 Unix 语义。例如,下面的每对 require() 表达式包含两个功能相等的调用。


-- “.“与 脚本cript.Parent 相等
require(script.Parent.ModuleScript)
require("./ModuleScript")
-- ../" 等于 脚本cript.Parent.Parent
require(script.Parent.Parent.ModuleScript)
require("../ModuleScript")

具体来说,需要通过字符串的解析语义如下:

  • 字符串路径必须以 ./../ 开始,其中 ./script.Parent 相等,而 ../script.Parent.Parent 相等。
  • 如果解决的路径指向一个 这不是一个 , 将尝试找到一个名为 或 的父辈,如果存在,并使用它,如果存在。
  • 如果所需的 ModuleScriptrequire() 被调用时不存在,调用将失败并抛出错误。换言之,需要通过字符串是非阻塞的:它不会默认等待 ModuleScript 被创建。

一旦返回对象由 初始 require() 调用的 ModuleScript ,将来的 require() 调用相同的 ModuleScript (在客户端服务器边界相同的一侧)将不再运行代码。相反,将提供初始 调用创建的同样 返回对象的参考。这种行为允许在不同脚本之间共享值,因为多个require()调用不同脚本的多个调用将引用相同的返回对象。如果返回的对象是表,表中存储的任何值都会被共享并由任何需要 ModuleScript 的脚本访问。

如上所述,“对象共享”行为不会跨越客户端-服务器边界。这意味着如果 可以访问客户端 和服务器 (例如被放置在 )以及 从两个 中调用 代码,那么在 中运行的代码将被运行两次,而 将从收到的返回对象中收到不同的返回对象。

请注意,如果用户想要运行的 ModuleScript 已上传到 Roblox(其实例名称为 MainModule ),那么只能使用 require() 函数在资产 ID 的 ModuleScript 上加载,但仅限于服务器。

参数

将被执行来检索它提供的返回值的 ModuleScript,或指向一个(字符串路径或资产ID)的引用。

返回

Variant

返回了什么 ModuleScript(通常是一个表或一个函数)。

select

返回所有参数后,在参数数字 index 之后。如果为负值,将从参数列表的末尾返回。


print(select(2, "A", "B", "C")) --> B C
print(select(-1, "A", "B", "C")) --> C

如果 index 参数设置为 "#" ,返回后传递的参数数量。


print(select("#", "A", "B", "C")) --> 3

参数

index: Variant

返回所有参数后的 args 后返回参数索引。如果设置为 "#",返回后传递的参数数量。

args: Tuple

一个 tuple 的参数。

返回

setmetatable

将给定的表 t 设置为 newMeta 。如果 newMetanil,那么 t 的可转换表将被移除。最后,这个函数返回了传给它的表 t 。如果 已经有一个具有 已设置的 metamethod 的 metatable,调用此操作会发生错误。


local meta = {__metatable = "protected"}
local t = {}
setmetatable(t, meta) -- 这设置了 t 的可表达式
-- 我们现在有一个表,t,带有一个可变表。如果我们尝试更改它...
setmetatable(t, {}) --> Error: cannot change a protected metatable

参数

设置目标表的表。

newMeta: Variant

如果 nil ,给定表的 metatable t 将被删除。否则,metatable 用于设置给定表 t

返回

tonumber

Variant

尝试将 arg 转换为具有指定基础的数字以解释值。如果无法转换,该函数返回 nil

基地可以是在 2 和 36 之间的任何整数,包括在内。在 10 以上的基地中,字母“A”(在大写或小写中)代表 10、“B”代表 11 等等,“Z”代表 35。在基础 10(默认)中,数字可能具有十进制部分以及可选的指数部分。在其他基地中,只接受未签名的整数。

如果字符串以 0x 开始,且没有提供基础,那么 0x 将被修剪,假设基础是 16 或十六进制。


print(tonumber("1337")) --> 1337(假设基础 10、十进制)
print(tonumber("1.25")) --> 1.25 (基础 10 可能有十进位部分)
print(tonumber("3e2")) --> 300 (基础 10 可能有指数部分, 3 × 10 ^ 2)
print(tonumber("25", 8)) --> 21(基础 8、八进制)
print(tonumber("0x100")) --> 256(假设基地 16、十六进制)
print(tonumber("roblox")) --> nil(不会发出错误)
-- 提示:如果您想要不可转换的数字提升错误,请与 assert 一起使用
print(assert(tonumber("roblox"))) --> Error: assertion failed

参数

arg: Variant

要转换为数字的对象。

base: number

用于将 arg 转换为数字的基础。

默认值:10

返回

Variant

tostring

接收任何类型的参数,并将其转换为合理格式的字符串。要完全控制数字转换的方式,请使用 string.format。如果 e 的 metatable 有一个 __tostring metamethod,那么它将以 e 为唯一参数被调用,并返回结果。


local isRobloxCool = true
-- 将 boolean 转换为字符串然后 concatenate:
print("Roblox is cool: " .. tostring(isRobloxCool)) --> Roblox is cool: true

参数

e: Variant

要转换为字符串的对象。

返回

type

返回其唯一参数的类型,编码为字符串。这个函数的可能的结果是 "nil" (一个字符串,不是值 nil)、"number""string""boolean""table""vector""function""thread""userdata"、和 "buffer"buffervector 原始类型是从 Luau 添加的,而不是从 Lua 添加的

参数

v: Variant

返回类型的对象。

返回

unpack

Variant

返回给定表的元素。默认情况下,i 是 1,而 j 是长度操作器定义的 list 长度。

参数

list: table

要解包的元素列表。

要解包的第一个元素的索引。

默认值:1

要解包的最后一个元素的索引。

默认值:#list

返回

Variant

xpcall

这个函数与 pcall() 相似,除了你可以设置一个新的错误处理器。

xpcall() 调用函数 f 在保护模式下,使用 err 作为错误处理器,并传递一个列表的参数。内部的任何错误 f 不会传播;相反,xpcall() 捕获错误,调用 err 函数与原始错误对象,并返回状态代验证码。其第一个结果是状态代码(一个 boolean),如果调用成功且没有错误,它将为真。在这种情况下,xpcall() 也返回调用后的所有结果,在这个第一个结果之后。在任何错误情况下,xpcall()返回false plus结果从err

pcall() 不同,err 函数保留函数 f 的堆栈跟踪,可以使用 debug.info()debug.traceback() 进行检查。

参数

在保护模式下调用的函数。

如果 xpcall 捕获错误,将用作错误处理的函数。

args: Tuple

返回

Variant

属性

一个表,它被分享到同一等级别上下文的所有脚本。

_VERSION

一个全球变量(不是函数),包含包含当前编译器版本的字符串。