你好,我正在尝试学习 Lua,我正在研究这门语言,然后我来到了这个代码块
for i = 1, 4, 1
do
if(i == 2) then
break
undefinedFunction("print 1")
end
print("print 2")
end
这对解释器来说很好,对未定义的函数没有任何作用。另一方面,如果我们像那样制作这个代码块
for i = 1, 4, 1
do
if(i == 2) then
break
1
end
print("Hello World asdasdsad asdasdas")
end
lua 解释器抛出错误 unexpected sign '1'。
所以我认为 Lua 解释器可以处理未定义的函数并忽略它们但是如果我这样编码
for i = 1, 4, 1
do
if(i == 2) then
break
end
undefinedFunction("argument 1")
print("print 1")
end
现在 Lua 解释器给出了错误。为什么会出现不一致?
最佳答案
这里的区别是“语法错误”与“运行时错误”。
第二个片段有语法错误:单个文字(例如数字 1
或字符串 "foo"
)不是有效语句。
在 Lua 开始运行文件之前,文件需要没有语法错误,这就是为什么无论您将带有 1
的行放在哪里,第二个代码段都会失败。
第三个片段有一个运行时错误:文件语法完全正确,Lua 可以开始解释它。只有当它到达违规行时,VM 才会意识到 undefinedFunction == nil
并且它不能将其用作函数。
对比第一个片段,其中:
- 没有语法错误
- 出现运行时错误的行“隐藏”在
break
后面,永远不会到达,因此永远不会触发错误
break
在这里没什么特别的,一个简单的 if
可以显示相同的行为:
语法错误:
if true then
1
end
运行时错误:
if true then
undefined()
end
没有错误:
if false then
undefined() -- This line is never reached, and will not cause an error
end
关于Lua 解释器与 break 语句不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74654240/