编译语句时出错'if'

  • 本文关键字:if 出错 语句 编译 lua
  • 更新时间 :
  • 英文 :


我运行一个小Lua块作为事件循环,调用luaL_loadstring()来加载它。注意,在这些示例中我有两个C函数;函数logmsg()将其字符串参数输出到日志文件,函数getevt()等待,直到事件准备好传递给块,并在事件发生时返回整数事件ID。

当我加载这个块时:

logmsg( 'Entering evt loop' )
while true do
    local evt
    evt = getevt()
    logmsg( 'Got event '..evt )
    if evt == 73 then
        logmsg( "Event equal to 73" )
    end
end
logmsg( "Exited evt loop" )

加载成功,当我运行它时,我得到了完全预期的输出。

但是如果我试图像这样改变'if'语句中的条件:

logmsg( 'Entering evt loop' )
while true do
    local evt
    evt = getevt()
    logmsg( 'Got event '..evt )
    if evt < 73 then
        logmsg( "Event less than 73" )
    elseif evt > 73 then
        logmsg( "Event greater than 73" )
    else
        logmsg( "Event equal to 73" )
    end
end
logmsg( "Exited evt loop" )

则加载失败,并返回错误码3和错误字符串

[string "logmsg('进入evt循环')…"]:6: 'then' expected near ';'

这怎么可能?数据块中甚至没有';'字符。是否有可能,如果我的编辑器把CR而不是CR+LF,它混淆了编译器?

我找到问题了。数据块是通过XML接口传入的,在这个过程中"<"似乎被转换为"<"。这就解释了神秘的错误消息,以及原始代码中不存在的";"。在将传入的字符串传递给luaL_loadstring()之前,我通过对传入的字符串进行原始缓冲区转储才发现了这一点。哇。真没想到。

最新更新