作者:奥桑黑黑更健康 | 来源:互联网 | 2023-10-09 20:11
编辑以获取更多详细信息:
我正在尝试让一只坐在树苗前的乌龟等待其生长,然后再将其砍倒。它将日志与前面的项目进行比较,直到匹配为止。我当前正在使用的系统可以运行,但是我希望有一种稍微更简单的编写方式。
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
}
}
代替
local tempV = fox.checkTarget.forward("minecraft:log")
if tempV[1] then
end
你可以
if fox.checkTarget.forward("minecraft:log")[1] then
end
,然后调用变量的第一个元素以获取它是否为true或
不是。
使用tempV[1]
时,您不会调用第一个元素,而是对其进行索引。
要调用某项内容,您必须使用调用运算符()
,因为布尔运算符是不可调用的,因此该调用运算符是不可调用的。