2015-07-29 6 views
0

У меня есть программа ComputerCraft набор для включения сирены, когда-либо не-белый список игроков вблизи:Lua Набор функций в 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() отсутствует в computercraft. Я задаюсь вопросом:

  1. Есть еще один (возможно лучше) способ найти, если массив a подмножество массива b и
  2. Если нет, где я могу получить API с помощью функции множества()?
+0

Там нет 'set' функция/тип данных в ванильным Lua , ни в вычислительной технике, насколько мне известно. Реализуйте его самостоятельно: 'local s = {}; для _, v в ipairs (arr) do s [v] = true; конец; return s' –

+0

Я получил заданный код из этого ответа: http://stackoverflow.com/a/28302698/3042952 –

ответ

0

Перечитывая источник для подмножества() кода, я вижу, что код, который я использовал требуется больше кода, ранее в ответ:

не
function set(list) 
    local t = {} 
    for _, item in pairs(list) do 
     t[item] = true 
    end 
    return t 
end 
Смежные вопросы