使用 LuaInterface 返回一个字符串

所以,我正在尝试在 C# 中实现 Lua 作为脚本语言。如果你将其作为控制台应用程序的一部分使用,它实际上是相当简单的。但是我想在 XNA 中创建一个游戏控制台。问题在于,Lua.DoString() 似乎返回一个控制台行,而不是一个字符串 - 如我所说,这在控制台应用程序中是可以的,但是我想将其作为字符串添加到输出缓冲区中,以便我可以在游戏中显示它,而不是在控制台窗口中。如果这很困惑,我很抱歉 - 希望代码能澄清问题。

using System;
using System.Collections.Generic;
using LuaInterface;

namespace LuaConsoleLibrary
{
    public class LuaConsole
    {
        private Lua lua;

        private bool isRunning = true;
        private string input;
        private List<string> outputBuffer;

        public bool IsRunning
        {
            get { return isRunning; }
        }

        public LuaConsole()
        {
            this.lua = lua;
        }

        public void Run()
        {
            int i = 0;
            while(isRunning)
            {
                outputBuffer.Add("> ");

                input = Console.ReadLine();
                outputBuffer.Add("");

                try
                {
                    lua.DoString(input);
                }
                catch(Exception e)
                {
                    outputBuffer.Add(e.Message);
                }
                finally
                {
                    outputBuffer.Add("");
                }
            }
        }
    }
}

基本上,我对 lua.DoString(input); 为什么能够工作而不需要使用 Console.WriteLine(lua.DoString(input)); 感到困惑。我甚至尝试了 outputBuffer.Add(lua.DoString(input).ToString());,理论上应该可行,因为 ToString 在那里是有效的。但它执行了 lua.DoString,然后抛出异常 - "对象引用未设置为对象实例"。除非我弄错了,所涉及的对象是 Lua,这使得 lua 成为一个有效的对象引用。无论如何,考虑到这两个解决方案都不起作用,我想知道是否有人了解 LuaInterface,以提供一种替代方法,以获取相同的结果。我基本上想要类似于 outputBuffer.Add(lua.DoString(input)); 的东西。顺便说一下,我用来测试这个的 Lua 命令是 print("test") - 也许 print 在某种程度上返回控制台行而不是字符串,但我想不出另一种从 Lua 返回字符串的方法。

如果我的问题很冗长或解释不清,请原谅 - 我试图尽可能简明扼要,但这是一个有点小众的问题,我真的不知道如何解释。哦,我确实尝试使用 Google,并浏览了 Stack Overflow 上的所有大约65个 LuaInterface 问题,所以我有 95% 的把握在提出这个问题之前尽到了自己的职责。 LuaInterface 可能只是不是那么为人所知的工具。

点赞
用户4435
用户4435

Object reference not set to instance of an object 是 C# 表示“某个东西为空,但不应该为空”的方式。

在这种情况下,最有可能的情况是 DoString 返回了 null,所以 null.ToString() 引发了异常。如果要在不抛出空值的情况下转换为字符串,可以尝试 outputBuffer.Add(Convert.ToString(lua.DoString(input)[0]))

我没有使用 LuaInterface 或 NLua,但我猜想要返回一个字符串,实际上你需要执行 return "test" 作为你的 Lua 命令。

2013-08-12 22:33:52