Встроенное окно интерактивного приглашения Lua в C # - PullRequest
2 голосов
/ 30 апреля 2011

Я пытался предоставить некоторые функции скрипта в своем приложении C #. После некоторых поисков Lua и LuaInterface выглядят как разумный способ сделать это. Встраивая виртуальную машину Lua в мой код C #, я могу загрузить скрипт Lua и методы обработки определены в классе C # без проблем.

Однако мне интересно, есть ли способ не только выполнить файл сценария lua в моя программа на c #, но также иметь интерактивную подсказку lua в моей программе? Таким образом, я могу набирать команды и сразу же видеть результаты.

Любой намек на то, с чего мне начать работать, будет очень полезен!

С наилучшими пожеланиями

1 Ответ

2 голосов
/ 30 апреля 2011

Модуль Lua debug содержит очень простую интерактивную консоль: debug.debug() (руководство Lua предлагает , этот модуль следует использовать только для отладки ).

Если это не отвечает вашим потребностям, достаточно легко реализовать его самостоятельно. Если бы вы написали это на самом 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 в исходном дистрибутиве, чтобы увидеть, как это делается.

...