【发布时间】: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() 函数在计算机上不存在。我想知道:
- 是否有另一种(可能更好)方法来查找数组
a是否是数组b的子集和 - 如果没有,我在哪里可以获得带有 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