首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Lua 5.4的ZeroBrane

带有Lua 5.4的ZeroBrane
EN

Stack Overflow用户
提问于 2020-08-10 19:40:37
回答 1查看 415关注 0票数 0

在Lua Studio最新的1.9版本中,如果我们选择菜单选项“项目”,“ZeroBrane解释器”,只有1.3版本。

如何添加5.4?另外,安装Lua5.4和iuplua for 5.4库的步骤是什么?luarocks不包括它。

提前谢谢你,

罗杰

EN

回答 1

Stack Overflow用户

发布于 2020-08-10 20:52:52

文档显示5.4已经安装,但在最近的windows版本中似乎并非如此。

查看一下ZeroBrane目录。有一个文件夹解释器,其中包含一些Lua文件。添加另一个解释器非常简单。

只需从5.3解释器配置中派生它,并尝试一下。看起来它做了所有的路径的事情。

luadeb53.lua:

代码语言:javascript
复制
dofile 'interpreters/luabase.lua'
local interpreter = MakeLuaInterpreter(5.3, ' 5.3')
interpreter.skipcompile = true
return interpreter

因此,我添加了一个luadeb54.lua,并将版本号更改为5.4。

当文件引用解释器/luabase.lua时,打开它并查看:

代码语言:javascript
复制
function MakeLuaInterpreter(version, name)

local function exePath(self, version)
  local version = tostring(version or ""):gsub('%.','')
  local mainpath = ide:GetRootPath()
  local macExe = mainpath..([[bin/lua.app/Contents/MacOS/lua%s]]):format(version)
  return (ide.config.path['lua'..version]
    or (ide.osname == "Windows" and mainpath..([[bin\lua%s.exe]]):format(version))
    or (ide.osname == "Unix" and mainpath..([[bin/linux/%s/lua%s]]):format(ide.osarch, version))
    or (wx.wxFileExists(macExe) and macExe or mainpath..([[bin/lua%s]]):format(version))),
  ide.config.path['lua'..version] ~= nil
end

return {
  name = ("Lua%s"):format(name or version or ""),
  description = ("Lua%s interpreter with debugger"):format(name or version or ""),
  api = {"baselib"},
  luaversion = version or '5.1',
  fexepath = exePath,
  frun = function(self,wfilename,rundebug)
    local exe, iscustom = self:fexepath(version or "")
    local filepath = ide:GetShortFilePath(wfilename:GetFullPath())

    if rundebug then
      ide:GetDebugger():SetOptions({runstart = ide.config.debugger.runonstart == true})

      -- update arg to point to the proper file
      rundebug = ('if arg then arg[0] = [[%s]] end '):format(wfilename:GetFullPath())..rundebug

      local tmpfile = wx.wxFileName()
      tmpfile:AssignTempFileName(".")
      filepath = ide:GetShortFilePath(tmpfile:GetFullPath())

      local ok, err = FileWrite(filepath, rundebug)
      if not ok then
        ide:Print(("Can't open temporary file '%s' for writing: %s."):format(filepath, err))
        return
      end
    end
    local params = self:GetCommandLineArg("lua")
    local code = ([[-e "io.stdout:setvbuf('no')" "%s"]]):format(filepath)
    local cmd = '"'..exe..'" '..code..(params and " "..params or "")

    -- modify LUA_CPATH and LUA_PATH to work with other Lua versions
    local envcpath = "LUA_CPATH"
    local envlpath = "LUA_PATH"
    if version then
      local env = "PATH_"..string.gsub(version, '%.', '_')
      if os.getenv("LUA_C"..env) then envcpath = "LUA_C"..env end
      if os.getenv("LUA_"..env) then envlpath = "LUA_"..env end
    end

    local cpath = os.getenv(envcpath)
    if rundebug and cpath and not iscustom then
      -- prepend osclibs as the libraries may be needed for debugging,
      -- but only if no path.lua is set as it may conflict with system libs
      wx.wxSetEnv(envcpath, ide.osclibs..';'..cpath)
    end
    if version and cpath then
      -- adjust references to /clibs/ folders to point to version-specific ones
      local cpath = os.getenv(envcpath)
      local clibs = string.format('/clibs%s/', version):gsub('%.','')
      if not cpath:find(clibs, 1, true) then cpath = cpath:gsub('/clibs/', clibs) end
      wx.wxSetEnv(envcpath, cpath)
    end

    local lpath = version and (not iscustom) and os.getenv(envlpath)
    if lpath then
      -- add oslibs libraries when LUA_PATH_5_x variables are set to allow debugging to work
      wx.wxSetEnv(envlpath, lpath..';'..ide.oslibs)
    end

    -- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
    local pid = CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
      function() if rundebug then wx.wxRemoveFile(filepath) end end)

    if (rundebug or version) and cpath then wx.wxSetEnv(envcpath, cpath) end
    if lpath then wx.wxSetEnv(envlpath, lpath) end
    return pid
  end,
  hasdebugger = true,
  scratchextloop = false,
  unhideanywindow = true,
  takeparameters = true,
}

end

return nil -- as this is not a real interpreter

检查/bin文件夹,您会发现Lua可执行文件。添加5.4内容

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63339463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档