Lua eof for function,如何推断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

以上显示了一个常用的函数,它访问索引并对其进行处理。

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

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

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

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

蒟蒻解释一下:

期望,1if else...)+1(func)=2(需要end)

现实,1if else...)+1(func)+1(???如何解释此项???)=3(需要end

最后,如果你太懒惰尝试去除end并创建它们的变量以验证

这是一个标准的错误结果 >

> 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 ?
点赞
用户6879826
用户6879826

如果你将 else 后面的 if 放在新的一行,问题可能会更容易看出来:

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

else 后面的 if 开始了一个新的 if 语句,需要一个新的 end。但是 Lua 有一个 elseif 关键字,允许嵌套的 if,而不需要多个 end

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
2020-10-18 13:09:45