Lua脚本逐行编写
我使用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++; } }
这对我的Lua代码很有用
move(20, 19) sleep(1000) move(5, 19)
但我不能只执行一行语句。 就像我的绑定函数move()
。 但我还想使用函数和循环之类的多行语句。 如果文本编辑器包含:
function test() return "Hallo Welt" end
lua(line)
将引发exception,因为只传递第一行function test()
并且解释器缺少end语句。
我能做什么? 我应该检查行是否以函数开头,而…命令和扫描结束块并将其添加到字符串中以便我可以执行并突出显示此多行语句的所有内容? 这可能吗? 我该怎么办?
请帮忙。
我想实现你获得正在执行的当前行(如在Visual Studio中)并突出显示它。
不要通过一次给Lua脚本添加一行来做到这一点。 运行整个脚本,让Lua在执行切换到新行时通过调试钩子通知您:
Lua编程:Hooks
Lua手册:debug.sethook
[编辑]在回答这个问题时,我没有意识到接受的答案中提到的LUA解析器。 我同意那张海报,你应该尽可能使用官方解析库,而不是自己动手。 以下回答了原始问题,但不应被视为最终答案。 请查看已接受的答案,以找到解决此问题的正确方法。[/ EDIT]
您明确地调用它来解析代码行/执行LUA。
如果你有一个多行函数,请确保在调用执行块之前传递完整的东西。
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) }