Попытка сравнить строку с номером - компьютерный
local level = 3 -- Required access level
local sideIn = "bottom" -- Keycard Input Side
local sideOut = "right" -- Redstone output side
local rsTime = 3 -- Redstone time
while true do
if disk.isPresent(sideIn) then
term.clear()
term.setCursorPos(1,1)
local code = fs.open("disk/passcode.lua", "r").readAll()
if code == nil then
local code = 0
else
local code = tonumber(code)
end
if code >= level then
print("> Access Granted")
disk.eject(sideIn)
rs.setOutput(sideOut,true)
sleep(rsTime)
rs.setOutput(sideOut,false)
else
print("> Permission Denied")
disk.eject(sideIn)
end
end
end
Когда диск не вставлен, выдается ошибка:
.temp:15: attempt to compare string with number expected, got string
Кто-нибудь знает, как решить эту проблему? Я бросил в ноль шашки, но, кажется, не работает. Любые идеи о том, как я мог это исправить? Я пытаюсь, по крайней мере, полчаса, и до сих пор понятия не имею.
1 ответ
В этой секции:
local code = fs.open("disk/passcode.lua", "r").readAll() --(1)
if code == nil then
local code = 0 --(2)
else
local code = tonumber(code) --(3)
end
Сначала создается новая локальная переменная с local code = ...
, В новом блоке, который вы создаете с помощью if
Вы также создаете новые локальные переменные с local code = ...
, Поскольку он имеет то же имя, что и локальный до него, он "маскирует" его, запрещая вам доступ к первому code
в остальной части блока. Значение, которое вы назначаете 0, не является той же переменной вне if
итак первый code
не влияет. В else
блок для второго code
заканчивается, и то же самое происходит между else
а также end
когда условие ложно. Чтобы не назначать значения 0
или же tonumber(code)
к новым переменным, вы должны удалить local
от local code = ...
, Итак, вот что должно быть:
local level = 3 -- Required access level
local sideIn = "bottom" -- Keycard Input Side
local sideOut = "right" -- Redstone output side
local rsTime = 3 -- Redstone time
while true do
if disk.isPresent(sideIn) then
term.clear()
term.setCursorPos(1,1)
local code = fs.open("disk/passcode.lua", "r").readAll()
if code == nil then
code = 0
else
code = tonumber(code)
end
if code >= level then
print("> Access Granted")
disk.eject(sideIn)
rs.setOutput(sideOut,true)
sleep(rsTime)
rs.setOutput(sideOut,false)
else
print("> Permission Denied")
disk.eject(sideIn)
end
end
end