0

所以,我正在尝试将 Lua 实现为 C# 中的脚本语言。如果您将它用作控制台应用程序的一部分,它真的很简单。但我希望能够在 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 返回字符串的方法。

如果我的问题是杂乱无章或解释不清的,我深表歉意 - 我试图尽可能简洁,但这是一个小众问题,我真的不知道如何解释它。哦,我确实尝试过谷歌,我浏览了 Stack Overflow 上所有 65 个左右的 LuaInterface 问题,所以我有 95% 的把握在问这个问题之前已经做了尽职调查。我猜,LuaInterface 并不是一个众所周知的工具。

4

1 回答 1

1

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-12T22:33:52.480 回答