使用 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 可能只是不是那么为人所知的工具。
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
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 命令。