调用方式
Functions.collections.deepcopy(array, except, invert)
将其记录为名为 Functions.collections.deepcopy 的依赖项(接受自动补全即可完成),然后按该名称调用。
作用
尽管历史上名为 deepcopy,它创建的是一个经过筛选的浅拷贝。嵌套的值保留其原始身份,且不会复制源表的元表。默认排除 except 值中列出的键;invert 为 true 时只包含列出的键。输入为 nil 时返回 nil。
参数
| 名称 | 类型 | 作用 |
|---|---|---|
array | table | nil | 要浅拷贝的表,或 nil。 |
except | table | nil | 可选的键值集合,用于选择条目;其自身的键会被忽略。 |
invert | boolean | nil | 为 true 时只包含列出的条目;为 false 或 nil 时排除列出的条目。 |
返回值
| 1 | table | nil | 新的经过筛选的浅拷贝表;输入为 nil 时为 nil。 |
|---|
版本
内置辅助函数在每个版本上都会注册。不同的是它们读取的游戏 API;某个 API 缺失时,辅助函数会改用后备方案,或返回 nil 并附上原因。
它不直接读取任何游戏 API。
插件如何调用它
- 可攻击 (widget)
local unit = addon:Widget_UnitWidget(value, Functions.collections.deepcopy(addon.units, { "player", "pet" }), - 施法可打断 (widget)
local unit = addon:Widget_UnitWidget(value, Functions.collections.deepcopy(addon.units, { "player", "pet" }), - 引导可打断 (widget)
local unit = addon:Widget_UnitWidget(value, Functions.collections.deepcopy(addon.units, { "player", "pet" }), - 职业 (widget)
local unit = addon:Widget_UnitWidget(value, Functions.collections.deepcopy(addon.units, { "player", "pet" }), - 单位分类 (widget)
local unit = addon:Widget_UnitWidget(value, Functions.collections.deepcopy(addon.units, { "player", "pet" }), - 战斗动作历史 (widget)
local unit = addon:Widget_UnitWidget(value, Functions.collections.deepcopy(addon.units, { "player", "pet", "target" }, true), - 战斗动作历史时间 (widget)
local unit = addon:Widget_UnitWidget(value, Functions.collections.deepcopy(addon.units, { "player", "pet", "target" }, true), - 生物类型 (widget)
local unit = addon:Widget_UnitWidget(value, Functions.collections.deepcopy(addon.units, { "player", "pet" }),
以及另外 12 处: 敌对 (widget), 在队伍中 (widget), 免疫 (widget), 是同一单位 (widget), PvP 状态 (widget), 有抗性 (widget), 职责 (widget), 逃跑者 (widget), 角色属性 (widget), 拥有可偷取的增益效果 (widget), 仇恨 (widget), 区域 PvP (widget)
源码
Functions/collections.lua,第 141 行。在游戏中为只读;“复制”会生成一份可编辑的副本。
Functions.collections.deepcopy(array, except, invert)
if array == nil then
return nil
end
if invert == nil then
invert = false
end
local rv = {}
for k,v in pairs(array) do
local skip = invert
if except ~= nil then
for _,v2 in pairs(except) do
if (k == v2) then
skip = not invert
break
end
end
end
if not skip then
rv[k] = v
end
end
return rv