【问题标题】:Lua Set Functions in ComputerCraftComputerCraft 中的 Lua 集函数
【发布时间】:2015-07-30 01:02:26
【问题描述】:

我有一个 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() 函数在计算机上不存在。我想知道:

  1. 是否有另一种(可能更好)方法来查找数组 a 是否是数组 b 的子集和
  2. 如果没有,我在哪里可以获得带有 set() 函数的 API?

【问题讨论】:

  • 香草 Lua 中没有 set 函数/数据类型,据我所知,计算机技术中也没有。自己实现:local s = {}; for _,v in ipairs(arr) do s[v] = true; end; return s
  • 我从这个答案中得到了设置代码:stackoverflow.com/a/28302698/3042952

标签: lua computercraft


【解决方案1】:

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

function set(list)
   local t = {}
   for _, item in pairs(list) do
       t[item] = true
   end
   return t
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多