如果 Luau 尝试使用值或 变量 在操作,例如 乘法 、 concatenation 或 1> 分配1> ,但值不是操作期望的类型,那么 Luau 会强制将值转换为更改数据输入。 强制在运行时对变量发生,不会更改变量
arithmetic
Luau 使用 数学操作 中的数字来强制字符串。 此行为已内置在 Luau 中。如果类型与 Luau 不兼容,Luau将抛出一个错误并不会运行剩余的脚本。 例如,您不能将字符串添加到数字中,如果字符串不代表数字。
print(100 + "7") -- 107print(100 - "7") -- 93print("1000" + 234) -- 123456print("1000" - 234) -- 766print("hello" + 234) -- error: attempt to perform arithmetic (add) string and number
concatenation
在并行中,Luau强制数字变为字符串。要使用 Luau 的并行转换器,请使用 string.format() 函数。
print("Pi is " .. math.pi) --> Pi 是 3.1415926535898print("Pi is " .. 3.1415927) --> Pi 是 3.1415927-- 圆到三位数print("Pi is " .. string.format("%.3f", 3.1415927)) -- Pi is 3.142
分配
一些属性期望特定数据类型,例如 枚列 或字符串,但您可以将其值分配到不同类型,并且 Luau 将其转换为期望的类型。
枚数
Luau 强制数值和枚列值到全部枚数名称。例如,您可以使用一个数字、字符串或全部枚数名称来命名 Part.Material 属性,而且打印函数总是打印完整枚数名称。 为了实现最佳实践,请使用 print() 。 有关枚数的更多信息,请参阅 Enums
local part1 = Instance.new("Part")part1.Parent = workspacepart1.Material = 816print(part1.Material) -- 枚数.Material.Concretelocal part2 = Instance.new("Part")part2.Parent = workspacepart2.Material = "Concrete"print(part2.Material) -- 枚数.Material.Concrete-- 这是最佳实践,因为它是最明确的local part3 = Instance.new("Part")part3.Parent = workspacepart3.Material = Enum.Material.Concreteprint(part3.Material) -- Enum.Material.Concrete
时间的日
Class.Lighting.TimeOfDay 属性, которое定义是否为夜晚、白天或任何其他时间,是 Luau 对 DateTime 数据类输入的字符表示。如果您将数字分配为 Lighting.TimeOfDay ,Luau 将它转换为 1>Datatype.DateTime1> 的字符表示。
local Lighting = game:GetService("Lighting")Lighting.TimeOfDay = "05:00:00"print(Lighting.TimeOfDay) -- 05:00:00Lighting.TimeOfDay = 5print(Lighting.TimeOfDay) -- 05:00:00