函数的Lua eof,如何推断end命令的数量和解释

函数的Lua eof,如何推断end命令的数量和解释,lua,Lua,上面显示了一个常用的函数, 它是一个访问索引并处理索引的函数 同时,还有其他一些布尔值会影响流 据我所知,一个if…else if..else需要一个end语句 然后函数本身需要一个end语句 但是,如果复制上面的脚本并删除最后一个end语句,解释器将抛出一个错误 对于困惑的大脑: function resolvecmd(cmdstr) local func = c_tbl[cmdstr] userhistcmd[cmdcount]=userhistcmd

上面显示了一个常用的函数, 它是一个访问索引并处理索引的函数

同时,还有其他一些布尔值会影响流

据我所知,一个
if…else if..else
需要一个
end
语句

然后函数本身需要一个end语句

但是,如果复制上面的脚本并删除最后一个end语句,解释器将抛出一个错误

对于困惑的大脑:

function resolvecmd(cmdstr)     
    local func = c_tbl[cmdstr]
    userhistcmd[cmdcount]=userhistcmd   
    if(func) then
        return func()
    else if (advcmdsexist) then
            runadvcmd(cmdstr)   
        else
            c_tbl["listcmd"]()
        end 
    end 
end
预期为1(如果有其他情况)+1(函数)=2(需要结束) 现实,1(如果有…)+1(函数)+1(????这是什么解释??)=3(需要结束) 最后,如果您懒得尝试删除端点并创建这些变量,请自己尝试验证

这是一个库存错误结果>

expected,1(if else..)+1(func)=2(end needed) reality,1(if else..)+1(func)+1(????what explain this????)=3(end needed)
>lua:从文件加载模块“bsccmds”时出错
>'D:\Coding\lua\standardenv\bin\bsccmds.lua':
>D:\Coding\lua\standardenv\bin\bsccmds.lua:39:在堆栈回溯附近应为“end”(在第24行关闭“function”):
>[C]:在哪?
>[C]:在函数“require”中
>main.lua:2:在主块中
>[C]:在哪?

如果将
if
放在
else
后面的另一行,可能更容易看到问题:

> lua: error loading module 'bsccmds' from file
> 'D:\Coding\lua\standardenv\bin\bsccmds.lua':
>         D:\Coding\lua\standardenv\bin\bsccmds.lua:39: 'end' expected (to close 'function' at line 24) near <eof> stack traceback:
>         [C]: in ?
>         [C]: in function 'require'
>         main.lua:2: in main chunk
>         [C]: in ?
else
后面的
if
开始一个新的
if
语句,需要一个新的
end
。但是Lua有
elseif
关键字,它允许嵌套
if
s,而不需要多个
end
s:

function resolvecmd(cmdstr)
  local func = c_tbl[cmdstr]
  userhistcmd[cmdcount]=userhistcmd
  if (func) then
    return func()
  else
    if (advcmdsexist) then
      runadvcmd(cmdstr)
    else
      c_tbl["listcmd"]()
    end
  end
end

如果在Lua中使用,则不要使用;使用
elseif
。谢谢,这真是太神奇了。我怀疑解释器会有一些不同。我会等一个聪明的人来解释一些内部内容。谢谢,我的头脑被炸了,这给了我一个教训。
function resolvecmd(cmdstr)
  local func = c_tbl[cmdstr]
  userhistcmd[cmdcount]=userhistcmd
  if (func) then
    return func()
  elseif (advcmdsexist) then
    runadvcmd(cmdstr)  
  else
    c_tbl["listcmd"]()
  end
end