参考 › 函数参考 › Functions

Functions.collections.deepcopy

公共

调用方式

Functions.collections.deepcopy(array, except, invert)

将其记录为名为 Functions.collections.deepcopy 的依赖项(接受自动补全即可完成),然后按该名称调用。

作用

尽管历史上名为 deepcopy,它创建的是一个经过筛选的浅拷贝。嵌套的值保留其原始身份,且不会复制源表的元表。默认排除 except 值中列出的键;invert 为 true 时只包含列出的键。输入为 nil 时返回 nil。

参数

名称类型作用
arraytable | nil要浅拷贝的表,或 nil。
excepttable | nil可选的键值集合,用于选择条目;其自身的键会被忽略。
invertboolean | nil为 true 时只包含列出的条目;为 false 或 nil 时排除列出的条目。

返回值

1table | 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

返回函数参考