LUA - ZeroBrane IDE:编译功能
LUA - ZeroBrane IDE: Compile feature
在 ZeroBrane Studio 中,如果我使用“项目 - 编译 (F7)” - 究竟会发生什么?
我的 Lua 代码会创建一个独立的 .exe 吗?
如果是这样-在哪个目录中?
我使用 Windows 10。
(无法在文档中找到任何信息)
根据我快速查看源代码所见,它只是通过使用编译文件的 loadstring
加载代码来检查代码是否有任何错误。
没有输出文件,只有一些关于任何错误的文本输出。
但这只是一个假设。请随时检查这是否真的是您单击该按钮时调用的函数。
function CompileProgram(editor, params)
local params = {
jumponerror = (params or {}).jumponerror ~= false,
reportstats = (params or {}).reportstats ~= false,
keepoutput = (params or {}).keepoutput,
}
local doc = ide:GetDocument(editor)
local filePath = doc:GetFilePath() or doc:GetFileName()
local loadstring = loadstring or load
local func, err = loadstring(StripShebang(editor:GetTextDyn()), '@'..filePath)
local line = not func and tonumber(err:match(":(%d+)%s*:")) or nil
if not params.keepoutput then ClearOutput() end
compileTotal = compileTotal + 1
if func then
compileOk = compileOk + 1
if params.reportstats then
ide:Print(TR("Compilation successful; %.0f%% success rate (%d/%d).")
:format(compileOk/compileTotal*100, compileOk, compileTotal))
end
else
ide:GetOutput():Activate()
ide:Print(TR("Compilation error").." "..TR("on line %d"):format(line)..":")
ide:Print((err:gsub("\n$", "")))
-- check for escapes invalid in LuaJIT/Lua 5.2 that are allowed in Lua 5.1
if err:find('invalid escape sequence') then
local s = editor:GetLineDyn(line-1)
local cleaned = s
:gsub('\[abfnrtv\"\']', ' ')
:gsub('(\x[0-9a-fA-F][0-9a-fA-F])', function(s) return string.rep(' ', #s) end)
:gsub('(\%d%d?%d?)', function(s) return string.rep(' ', #s) end)
:gsub('(\z%s*)', function(s) return string.rep(' ', #s) end)
local invalid = cleaned:find("\")
if invalid then
ide:Print(TR("Consider removing backslash from escape sequence '%s'.")
:format(s:sub(invalid,invalid+1)))
end
end
if line and params.jumponerror and line-1 ~= editor:GetCurrentLine() then
editor:GotoLine(line-1)
end
end
return func ~= nil -- return true if it compiled ok
end
在 ZeroBrane Studio 中,如果我使用“项目 - 编译 (F7)” - 究竟会发生什么?
我的 Lua 代码会创建一个独立的 .exe 吗?
如果是这样-在哪个目录中?
我使用 Windows 10。
(无法在文档中找到任何信息)
根据我快速查看源代码所见,它只是通过使用编译文件的 loadstring
加载代码来检查代码是否有任何错误。
没有输出文件,只有一些关于任何错误的文本输出。
但这只是一个假设。请随时检查这是否真的是您单击该按钮时调用的函数。
function CompileProgram(editor, params)
local params = {
jumponerror = (params or {}).jumponerror ~= false,
reportstats = (params or {}).reportstats ~= false,
keepoutput = (params or {}).keepoutput,
}
local doc = ide:GetDocument(editor)
local filePath = doc:GetFilePath() or doc:GetFileName()
local loadstring = loadstring or load
local func, err = loadstring(StripShebang(editor:GetTextDyn()), '@'..filePath)
local line = not func and tonumber(err:match(":(%d+)%s*:")) or nil
if not params.keepoutput then ClearOutput() end
compileTotal = compileTotal + 1
if func then
compileOk = compileOk + 1
if params.reportstats then
ide:Print(TR("Compilation successful; %.0f%% success rate (%d/%d).")
:format(compileOk/compileTotal*100, compileOk, compileTotal))
end
else
ide:GetOutput():Activate()
ide:Print(TR("Compilation error").." "..TR("on line %d"):format(line)..":")
ide:Print((err:gsub("\n$", "")))
-- check for escapes invalid in LuaJIT/Lua 5.2 that are allowed in Lua 5.1
if err:find('invalid escape sequence') then
local s = editor:GetLineDyn(line-1)
local cleaned = s
:gsub('\[abfnrtv\"\']', ' ')
:gsub('(\x[0-9a-fA-F][0-9a-fA-F])', function(s) return string.rep(' ', #s) end)
:gsub('(\%d%d?%d?)', function(s) return string.rep(' ', #s) end)
:gsub('(\z%s*)', function(s) return string.rep(' ', #s) end)
local invalid = cleaned:find("\")
if invalid then
ide:Print(TR("Consider removing backslash from escape sequence '%s'.")
:format(s:sub(invalid,invalid+1)))
end
end
if line and params.jumponerror and line-1 ~= editor:GetCurrentLine() then
editor:GotoLine(line-1)
end
end
return func ~= nil -- return true if it compiled ok
end