參考資料 › 函式參考 › 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

返回函式參考