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]
你不是在调用第一个元素,而是在索引它。
要调用某些东西,您必须使用调用运算符 ()
,这没有意义,因为布尔值不可调用。
编辑以获取更多详细信息:
我想让一只乌龟坐在树苗前,等它长大后再砍掉它。它将日志与前面的项目进行比较,直到匹配为止。我目前正在使用的系统可以工作,但我希望有一种稍微更简单的方式来编写它。
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]
你不是在调用第一个元素,而是在索引它。
要调用某些东西,您必须使用调用运算符 ()
,这没有意义,因为布尔值不可调用。