我需要有关计算机技术中的 lua 程序的帮助

问题描述 投票:0回答:2

我最近一直在做一个项目,制作一个机场计算机,可以防止飞机互相着陆。由于某种原因,每次我运行程序时,它都会给我一条错误消息。我有另一个程序也可以获取错误消息,它将所有传入的消息打印到监视器上。这是我的代码:

程序1的错误消息(此消息仅在收到消息后出现:

[启动:9:尝试比较 __le 与 nil 和 number]

程序 2 的错误消息:

[监视器:2:尝试调用 nil]

第一个节目:

shell.openTab("monitor")
local Landing_open = true
rednet.open("top")

while true do

  local id, message, distance = rednet.receive()

  if message == "Requesting Landing" and distance <= 500 and Landing_open == true then   
    rednet.send(id, "Landing is granted. Please respond with Landing finished when you exit the runway.")
    Landing_open = false

  elseif message == "Requesting Landing" and distance>500 then
     rednet.send(id, "Landing is not granted. Please try again when you are closer to the airport,")

  elseif message == "Requesting Landing" and Landing_open == false then
       rednet.send(id, "Landing is not granted. Please try again later.")

  elseif message == "Landing Finished" then
    rednet.send(id, "Roger that")
    Landing_open = true    

  elseif message == "Airports" then
    rednet.send(id, "Melee Airport")
  end
end    

下一个节目:

local monitor = peripheral.wrap("left")
monitor.setCursorPos(1,1)
while true do
  local x, y = monitor.getCursorPos()
  if y > 10 then
  monitor.clear()
  monitor.setCursorPos(1,1)
  end
  id, message,distance = rednet.receive()
  monitor.write(id)
  monitor.write(message)
  monitor.write(distance)
end
lua computercraft
2个回答
0
投票
  • 程序 1 (
    startup
    ) 正在抱怨,因为“LE”失败,翻译为“小于或等于”,仅在
    distance <= 500
    时发生。 因此,由于某种原因,
    distance
    没有被设置为数字。 在检查 rednet.receive docs 时,看起来第三个返回值是
    protocol
    ,它声称是一个“字符串”。
  • 程序 2 失败,因为第 1 行中的调用由于某种原因未设置
    monitor

0
投票
  • 在程序1中尝试先打印出距离的值,并检查它是否存在,如果由于某种原因它是一个字符串,则执行
    tonumber(distance)

固定线

(line 9)
应该是这样的。

if message == "Requesting Landing" and tonumber(distance) <= 500 and Landing_open == true then

  • 在program2中我认为你应该使用“
    :
    ”而不是“
    .
    ” 即
    monitor.setCursorPos(1,1)
© www.soinside.com 2019 - 2024. All rights reserved.