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行,我得到了一个尝试调用nil的错误。这让我认为,set()函数在computercraft上不存在。我想知道:

  1. 是否有另一种(或者更好的)方法来确定数组a是否是数组b的子集,
  2. 如果没有,我在哪里可以获取具有set()函数的API?
点赞
用户3042952
用户3042952

重新阅读subset()代码的源代码后,我发现我使用的代码需要更多答案中之前的代码:

function set(list)
   local t = {}
   for _, item in pairs(list) do
       t[item] = true
   end
   return t
end
2015-07-29 17:02:26