我通过使用C# libary将Lua脚本添加到我的DynamicLua应用程序中,它运行得非常好。我希望实现您得到正在执行的当前行(如在Visual中)并突出显示它。
目前,我正在这样做:
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"
endlua(line)将引发异常,因为只有第一行function test()被传递,而解释器缺少end语句。
我能做什么?我应该检查行是否以函数开头,而.命令和than扫描结束块并将其添加到字符串中,这样我就可以在一次执行并突出显示这个多行语句。这有可能吗?我该怎么做?
请帮帮忙。
发布于 2014-06-21 06:21:24
我希望实现您得到正在执行的当前行(如在Visual中)并突出显示它。
不要一次给Lua一行脚本来做这件事。运行整个脚本,并让Lua在执行切换到新行时通过调试钩子通知您:
Lua的编程:钩子
Lua手册: debug.sethook
发布于 2014-06-20 20:09:13
编辑在这个答案时,我不知道在接受答案中提到的LUA解析器。我同意这张海报,您应该尽可能使用官方解析库,而不是滚动自己的库。以下回答了原来的问题,但不应被视为最终的答案。请查看已接受的答案,以获得处理此问题的正确方法。
您将显式调用它来解析代码行/执行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)
}https://stackoverflow.com/questions/24334574
复制相似问题