returns 数组的 Computercraft 函数,使用第一个元素作为布尔值

Computercraft function that returns an array, use first element for boolean

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

我想让一只乌龟坐在树苗前,等它长大后再砍掉它。它将日志与前面的项目进行比较,直到匹配为止。我目前正在使用的系统可以工作,但我希望有一种稍微更简单的方式来编写它。

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 并且 returns 全部更改为 checkTarget.forward([=22 时底部的 table =]).

我的问题是,我目前正在创建一个一次性变量来存储从 checkTarget 返回的数组,然后调用该变量的第一个元素来判断它是否为真。我希望有一种方法可以将它包含在没有一次性变量 (tempV)

的 if 语句中
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 
  } 
}

而不是

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

你可以做到

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

and then calling the variable's first element to get if it's true or not.

使用 tempV[1] 你不是在调用第一个元素,而是在索引它。

要调用某些东西,您必须使用调用运算符 (),这没有意义,因为布尔值不可调用。