Lua中使用函数的if语句和for循环

我正在尝试使用魔兽世界本身的脚本创建某种宏。而我听说魔兽世界的脚本是基于Lua的。

虽然我已经使用Obj-C、Swift和C++编写了几年的代码,但很难使用Lua编写一些代码(即使非常简短)。

我正在尝试通过函数返回布尔值以在for循环中使用if语句。

如果是Obj-C,就像下面这样:

-(void) script {
   Bool on = NO;
   NSArray* zone = [@"Feralas",@"The hinterlands",@"Duskwood"];
   for(int i = 0 ; i < 3 ; i ++) {
      if([self clearCheck:i]) {
         NSLog(@"stone on! -> %@",zone[i]);
         on = YES;
      }
   }

   if (!on) {
      NSLog(@"No Stone Today..");
   }
}

-(Bool) clearCheck:(int)index {
   return [C_QuestLog IsQuestFlaggedCompleted:index+44329];
}

而我尝试过的Lua代码如下:

local o,z=false,{"Feralas","The hinterlands","Duskwood"}
function f(x) return C_QuestLog.IsQuestFlaggedCompleted(44329+x) end

for i=1,3 do
   if f(i) then do
      print("stone on! -> ",z[i])
      o=true
   end
end

if not o then do
   print("no stone today..")
end

我错过了什么?应该怎么做?我希望有人能从这种困境中帮助我...

点赞
用户2858170
用户2858170

你可能会看到如下形式的错误信息:

在......行附近缺少'end'(来关闭if…)

这是因为你的代码中存在多余的 do,它会“偷走”你为 if 提供的 end,导致每条 if 语句缺少一个 end

then 之后删除 do

Lua 5.4 参考手册: 3.3.4 控制结构

stat ::= if exp then block { elseif exp then block} [ else block] end

除此之外,你的代码语法是正确的。

2021-02-10 09:37:48