Lua Set Функции в ComputerCraft
У меня есть программа ComputerCraft, настроенная на включение сирены, когда рядом находятся игроки, не занесенные в белый список:
sensor = peripheral.wrap("top")
function arraysubset(a, b)
local s = set(b)
for _, el in pairs(a)
if not s[el] then
return false
end
end
return true
end
function sirenOn() rs.setBundledOutput("back",colors.blue) end
function sirenOff() rs.setBundledOutput("back",0) end
while 1 do
playersNear = sensor.getPlayerNames()
allowedPlayers = {"VirtualDXS","jettrom","Shad0wlurker16","Demonicmobster","FireFang0113","riggs135","DaisySnow123","MasterAlex930"}
if playersNear[1] ~= nil then
if arraysubset(playersNear,allowedPlayers) then sirenOff() else sirenOn() end
else sirenOff() end
end
Однако в строке 3 я получаю попытку вызвать ноль. Это заставляет меня думать, что функция set() отсутствует на компьютере. Я задаюсь вопросом:
- Есть ли другой (возможно, лучший) способ найти массив
a
является подмножеством массиваb
а также - Если нет, где я могу получить API с функцией set()?
1 ответ
Перечитывая исходный код для subset(), я вижу, что код, который я использовал, требовал больше кода из предыдущего ответа:
function set(list)
local t = {}
for _, item in pairs(list) do
t[item] = true
end
return t
end