尝试将字符串与数字进行比较

时间:2018-12-30 21:40:12

标签: lua computercraft

    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

有人知道如何解决此问题吗?我扔了一个nil检查器,但它似乎不起作用。关于如何解决此问题的任何想法?我已经尝试了至少半个小时,但我仍然一无所知。

1 个答案:

答案 0 :(得分: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的块结束,并且当条件为false时,在elseend之间发生相同的事情。要不将值0tonumber(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