首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua脚本逐行

Lua脚本逐行
EN

Stack Overflow用户
提问于 2014-06-20 19:45:52
回答 2查看 2.4K关注 0票数 4

我通过使用C# libary将Lua脚本添加到我的DynamicLua应用程序中,它运行得非常好。我希望实现您得到正在执行的当前行(如在Visual中)并突出显示它。

目前,我正在这样做:

代码语言:javascript
复制
   public static void RunLua(string LuaToExecute)
    {
        dynamic lua = new DynamicLua.DynamicLua();

        string[] lua_s_split = LuaToExecute.Split('\n');
        int counter = 0;
        foreach (string line in lua_s_split)
        {
            // highlight current line in editor
            HighlightLine(counter + 1);

            //execute current line 
            lua(line);
            counter++;
        }
    }

这对我的Lua代码非常有用

代码语言:javascript
复制
move(20, 19)
sleep(1000)
move(5, 19)

但我不能只执行一行语句。就像我的绑定函数move()。但我也想使用函数和循环之类的多行语句。如果文本编辑器包含:

代码语言:javascript
复制
function test()
    return  "Hallo Welt"
end

lua(line)将引发异常,因为只有第一行function test()被传递,而解释器缺少end语句。

我能做什么?我应该检查行是否以函数开头,而.命令和than扫描结束块并将其添加到字符串中,这样我就可以在一次执行并突出显示这个多行语句。这有可能吗?我该怎么做?

请帮帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-21 06:21:24

我希望实现您得到正在执行的当前行(如在Visual中)并突出显示它。

不要一次给Lua一行脚本来做这件事。运行整个脚本,并让Lua在执行切换到新行时通过调试钩子通知您:

Lua的编程:钩子

Lua手册: debug.sethook

票数 5
EN

Stack Overflow用户

发布于 2014-06-20 20:09:13

编辑在这个答案时,我不知道在接受答案中提到的LUA解析器。我同意这张海报,您应该尽可能使用官方解析库,而不是滚动自己的库。以下回答了原来的问题,但不应被视为最终的答案。请查看已接受的答案,以获得处理此问题的正确方法。

您将显式调用它来解析代码行/执行LUA。

如果您有一个多行函数,请确保在调用执行块之前传递完整的内容。

代码语言:javascript
复制
var myCommand = new StringBuilder()

... myCommand.Append(line) ...

foreach (string line in lua_s_split)
    {
        // highlight current line in editor
        HighlightLine(counter + 1);

        //execute current line 
        If(NeedsToExecute(istrue))
        {
            lua(myCommand.ToString());
            counter++;
        }
        else{myCommand.appendline(line)
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24334574

复制
相关文章

相似问题

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