c# - 在C#中嵌入一个Lua交互提示窗口

标签 c# .net shell lua interactive

我尝试在我的 C# 应用程序中提供一些脚本功能。 经过一些搜索,Lua 和 LuaInterface 看起来是一种合理的方式。 通过在我的 C# 代码中嵌入一个 Lua VM,我可以加载一个 Lua 脚本和处理方法 在 C# 类中定义没有任何问题。

但是,我想知道有没有办法不仅在 我的c#程序,还要在我的程序中有一个lua交互提示? 因此,我可以键入命令并立即查看返回结果。

任何关于我应该从哪里开始处理它的提示都会非常有帮助!

最好的问候

最佳答案

Lua 的 debug 模块包含一个非常基本的交互式控制台:debug.debug()(Lua 手册建议 this module should be used only for debugging)。

如果这不能满足您的需求,您自己实现一个也很容易。如果您要在 Lua 本身中编写它,那么绝对的骨架控制台将是:

while true do
   io.write("> ")
   loadstring(io.read())()
end

这会因语法或运行时错误而崩溃。一个稍微不那么简单的版本,它捕获(并忽略)错误:

while true do
   io.write("> ")
   local line = io.read()
   if not line then break end -- quit on EOF?
   local chunk = loadstring(line)
   if chunk then
      pcall(chunk)
   end
end

这可以通过显示语法错误(失败时 loadstring 的第二个返回值)、运行时错误(失败时 pcall 的第二个返回值)、返回值来增强评估代码([2..N] 从 pcall 成功返回值)等。

如果您想要真正花哨,您可以允许人们输入多行语句。查看源发行版中的 src/lua.c 以了解这是如何完成的。

关于c# - 在C#中嵌入一个Lua交互提示窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5838491/

相关文章:

shell - 为每一行标准输出执行命令的简单 shell 解决方案

c# - 在数组中找不到某些值

c# - 在 C# 中使用 ffmpeg.exe 将 MPG 转换为 AVI

c# - 如何在一个工作单元中处理数据库生成的 id 值

c# - 使用 AutoMapper 进行映射后,如何不丢失目标对象中存在但源对象中不存在的属性

c# - .NET 中在单独(单个)线程上管理任务队列的最佳方式

c# - GetPrintJobInfoCollection() 有时会出现异常

c# - 使用 DLR API 从 IronRuby 脚本捕获标准输出

java - 运行位于服务器上并映射为 U ://dirver on windows from windows in java application? 的 unix shell 脚本

python - 在脚本当前目录中从 Python 运行子进程 bash 脚本