逐行编写 Lua 脚本

pix*_*ort 4 c# lua scripting-language dynamic embedded-script

我使用DynamicLua库将 Lua 脚本添加到我的 C# 应用程序中,效果非常好。我想实现您获取正在执行的当前行(就像在 Visual Studio 中一样)并突出显示它。

目前我正在这样做:

   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++;
        }
    }
Run Code Online (Sandbox Code Playgroud)

这与我的 Lua 代码配合得很好,比如

move(20, 19)
sleep(1000)
move(5, 19)
Run Code Online (Sandbox Code Playgroud)

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

function test()
    return  "Hallo Welt"
end
Run Code Online (Sandbox Code Playgroud)

lua(line)引发异常,因为仅function test()传递第一行并且解释器缺少结束语句。

我能做些什么?我是否应该检查该行是否以函数、while... 命令开头,然后扫描结束块并将其添加到字符串中,以便我可以一次性执行并突出显示该多行语句?这可能吗?我该怎么做呢?

请帮忙。

Mud*_*Mud 5

我想实现您获取正在执行的当前行(就像在 Visual Studio 中一样)并突出显示它。

不要通过一次向 Lua 提供一行脚本来实现此目的。运行整个脚本并让 Lua 在执行切换到新行时通过调试挂钩通知您:

Lua 编程:Hooks
Lua 手册:debug.sethook