呼叫方式
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