如何解决在Lua中使用'if语句多条件'的问题

我在计算机工艺中使用Lua来自动挖掘矿藏。但是,我的掘地龟以前程序一直运行得很好,如果遇到'熔岩/流动的熔岩/水/流动的水源'就会停止。

在我的程序中,我有很多管理函数,例如燃料管理、隧道、与沙子的碰撞等等。还有一个检测掘地龟是否遇到'方块'的函数。

如果方块只是一个空气块,掘地龟就会继续前进。否则,掘地龟会挖掉这个方块,并且如果前面还有方块的话就不会向前移动。

问题是什么?前面提到的四个源都被视为方块,掘地龟无法向前移动。

我尝试使用多条件来修复这个问题,但它不起作用,掘地龟会向任何方向移动和挖掉方块。

所以我认为我的if语句的创建方式不好,可能是语法(拼接许多或者符号成为())。

如何解决这个问题?

function blockDetection(position,justDetection)
    success,detectionBlock = nil
    block_name = ""

    if position == "right" then
        turtle.turnRight()
        success,detectionBlock = turtle.inspect()
        turtle.turnLeft()
        if success then
            block_name = detectionBlock.name
            if justDetection == true and detectionBlock.name == "minecraft:air" then
                block_name = true

            elseif justDetection == true and detectionBlock.name ~= "minecraft:air" then
                block_name = false
            else

            end
        end
    end
end
点赞
用户14091631
用户14091631

我认为你的问题在于你忘记了返回block_name。如果省略return语句,则会隐式返回0个参数,因此尝试访问任何参数都会得到nil值。例如,if blockDetection(position,justDetetcion) then --[[something]] end,由于nil被认为是假,因此永远不会执行then-end块。

你还应该更改代码中的另一件事: 你不应该使用x==true。如果x是布尔值,则if x==true then ...等同于if x then ...

因此,你的代码应该像这样:

function blockDetection(position, justDetection)
    success, detectionBlock = nil
    block_name = ""

    if position == "right" then
        turtle.turnRight()
        success, detectionBlock = turtle.inspect()
        turtle.turnLeft()
        if success then
            block_name = detectionBlock.name
            if justDetection and detectionBlock.name == "minecraft:air" then
                block_name = true

            elseif justDetection and detectionBlock.name ~= "minecraft:air" then
                block_name = false
            else

            end
        end
    end
    return block_name
end
2022-05-11 10:50:28