你好,我正在尝试学习 Lua,我正在尝试这种语言,并且遇到了这个代码块
for i = 1, 4, 1
do
if(i == 2) then
break
undefinedFunction("print 1")
end
print("print 2")
end
Run Code Online (Sandbox Code Playgroud)
这对于解释器来说很好,并且对于未定义的函数没有任何作用。另一方面,如果我们像这样制作这个代码块
for i = 1, 4, 1
do
if(i == 2) then
break
1
end
print("Hello World asdasdsad asdasdas")
end
Run Code Online (Sandbox Code Playgroud)
lua 解释器抛出错误意外符号“1”。
所以我认为 Lua 解释器会处理未定义的函数并忽略它们,但如果我这样编码
for i = 1, 4, 1
do
if(i == 2) then
break
end
undefinedFunction("argument 1")
print("print 1")
end
Run Code Online (Sandbox Code Playgroud)
现在Lua解释器给出错误。为什么会出现不一致的情况呢?
这里的区别是“语法错误”与“运行时错误”。
第二个片段有语法错误:单个文字(例如数字1或字符串"foo")不是有效的语句。在 Lua 开始运行文件之前,文件需要没有语法错误,这就是为什么无论您将1.
第三个片段有一个运行时错误:文件语法完全正确,Lua 可以开始解释它。只有当它到达有问题的行时,虚拟机才会意识到这一点undefinedFunction == nil,并且它不能将其用作函数。
与第一个片段对比,其中:
break,永远不会到达,因此永远不会触发错误这里没什么break特别的,一个简单的if可以显示相同的行为:
语法错误:
if true then
1
end
Run Code Online (Sandbox Code Playgroud)
运行时错误:
if true then
undefined()
end
Run Code Online (Sandbox Code Playgroud)
没有错误:
if false then
undefined() -- This line is never reached, and will not cause an error
end
Run Code Online (Sandbox Code Playgroud)