返回数组的计算机功能,将第一个元素用于布尔值

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

编辑以获取更多详细信息:

我正在尝试让一只坐在树苗前的乌龟等待其生长,然后再将其砍倒。它将日志与前面的项目进行比较,直到匹配为止。我当前正在使用的系统可以运行,但是我希望有一种稍微更简单的编写方式。

checkTarget = {
    forward = function(tgt)
        check = {turtle.inspect()} --creates table with first as boolean, second as information table
        local rtn = {false, check[2]}
        if type(tgt) == "table" then
            for k, v in pairs(tgt) do
                if check[2].name == v then
                    rtn = {true, v}
                    break
                end
            end
        elseif tgt == nil then
            return check[1]
        elseif check[2].name == tgt then
            rtn[1] = true
        end
        return rtn
    end,--continued 

这将使用一个参数(字符串或字符串数​​组)进行比较。当检查前面的块时,会将详细信息保存到rtn中的第二个元素中,第一个保存为默认值false。如果字符串与已检查块的名称匹配,则它将rtn [1]更改为true并返回所有值,这是执行checkTarget.forward(“ minecraft:log”)时位于底部的表。

我的问题是,我目前正在制作一个一次性变量来存储从checkTarget返回的数组,然后调用该变量的第一个元素来获取它是否为真。我希望有一种方法可以将它包含在if语句中,而无需使用一次性变量(tempV)

repeat  
    local tempV = fox.checkTarget.forward("minecraft:log")
    if tempV[1] then
        cut()
        fox.goTo({x = 0, y = 0, z = 0})
        fox.face(0)
    end
    tempV = fox.checkTarget.forward("minecraft:log")
until not run
{ 
 false, 
 { 
   state = { 
        stage = 0, 
        type = "birch", 
   }, 
   name = "minecraft:sapling", 
   metadata = 2 
  } 
}
lua computercraft
1个回答
0
投票

代替

local tempV = fox.checkTarget.forward("minecraft:log")
if tempV[1] then
end

您可以做

if fox.checkTarget.forward("minecraft:log")[1] then
end

然后调用变量的第一个元素以获取其是否为true或没有。

使用tempV[1],您不会调用第一个元素,而是对其进行索引。

要调用某项,您必须使用调用运算符(),因为布尔运算符是不可调用的,所以它是不可调用的。

© www.soinside.com 2019 - 2024. All rights reserved.