Я пишу фантастический язык программирования для игры.Часть того, что делает интерпретатор, - это преобразование кода (строки) в объекты команд.Например, следующий код:
set var 1
создает переменную с именем var со значением 1. В интерпретаторе это создает новый экземпляр класса команды Set
.В настоящее время у меня есть список операторов if для создания команд:
if packet == "set":
return commands.Set
elif packet == "get":
return commands.Get
elif packet == "print":
return commands.Print
elif packet == "goto":
return commands.Goto
elif packet == "add":
return commands.Add
Но это настоящая боль при добавлении новых команд.Я должен добавить класс команды, добавить его в список синтаксиса и добавить его в таблицу здесь.
Я понял, что eval
может помочь мне здесь, но я знаю, что на это смотрят свысока.
return eval("commands." + packet.capitalize())
Есть ли лучший способ сделать это, или eval
хорошо в этом использовании?