Хотя хорошо, что в одной программе может быть много состояний Lua, имейте в виду, что каждое из них требует некоторой памяти.Если есть веская причина, по которой вы должны хранить две совершенно разные среды, такие как средства обеспечения безопасности или полностью несвязанные подсистемы, которые могут или не могут быть необходимы одновременно, то это, безусловно, того стоит.
В противном случае обычнолучше и более управляемым, чтобы иметь единственное состояние Lua.
Если вам нужно сильное разделение между различными блоками логики, Lua предоставит вам:
сопрограммы
Если вам нужно иметь несколько блоков логики, которые вы хотите приостановить и возобновить позже, вы можете просто обернуть их в сопрограммы.Это также может быть легко сделано из C и позволяет вам делать большую часть того, что вы могли бы делать с различными состояниями Lua.
Среды
Хотя до и после Lua 5.2 они работают несколько иначе,основная идея та же: вы можете изменить то, какие «глобальные» переменные будут видны части вашего кода, даже используя метатаблицы для доступа к другим данным или генерировать их на лету.
С этими двумявы действительно не должны сильно нуждаться в отдельных состояниях Lua в игре.Одно исключение из этого правила, очевидно, будет многопоточностью;у вас не должно быть более одного потока с доступом к одному и тому же состоянию Lua, если вы не используете какой-то механизм блокировки, поэтому имеет смысл иметь по одному состоянию на поток и настроить для них способ связи изнутри C.