Итак, я пытаюсь реализовать Lua как язык сценариев на C#. Это достаточно просто, если вы используете его как часть консольного приложения. Но я хочу создать игровую консоль в XNA. Проблема в том, что Lua.DoString(), кажется, возвращает консольную строку, а не строку, которая, как я уже сказал, отлично подходит для консольных приложений, но я хочу добавить ее в выходной буфер в виде строки, чтобы я мог отображать это в игре, а не в консольном окне. Приносим извинения, если это запутывает - надеюсь, код очистит его.Вернуть строку с LuaInterface
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, и я просмотрел все 65 вопросов или вопросов LuaInterface о переполнении стека, поэтому я на 95% уверен, что сделал свою должную осмотрительность, прежде чем задавать этот вопрос. Полагаю, LuaInterface просто не так хорошо известен из инструмента.
Вам не нужен 'новый Lua()' в какой-то момент? В противном случае 'lua' всегда является пустой ссылкой. 'this.lua = lua' просто присваивает поле' lua' самому себе, и там должно быть предупреждение о компиляторе. –
^Думаю, он прав на этом. Вы ничего не делаете в этом конструкторе. –
Хороший улов, майк z. Я не могу поверить, что сам этого не заметил ... но фактический код (только немного) сложнее, и экземпляр Lua передается в класс как параметр ... Итак, да, это огромная проблема в моем примере кода, но это определенно не решает мою проблему. – bpunsky