【问题标题】:Embedded a Lua interactive prompt window in C#在 C# 中嵌入一个 Lua 交互式提示窗口
【发布时间】:2011-08-15 20:38:32
【问题描述】:

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

但是,我想知道有没有一种方法不仅可以执行 lua 脚本文件 我的c#程序,还要在我的程序中有一个lua交互提示? 因此我可以输入命令并立即查看返回。

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

最好的问候

【问题讨论】:

    标签: c# .net shell lua interactive


    【解决方案1】:

    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 以了解这是如何完成的。

    【讨论】:

    • 使用debug 模块中的任何东西而不是用于调试是个坏主意。我建议从这个答案中删除第一段。
    • OP 没有说他想要控制台做什么。它很可能用于调试,在这种情况下信息很有用。免责声明比删除更合适。我现在补充一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 2012-06-23
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多