Я встроил движок IronPython в приложение C #. Я хочу представить некоторые пользовательские команды (методы) для интерпретатора. Как мне это сделать?
В настоящее время у меня есть что-то вроде этого:
public delegate void MyMethodDel(string printText);
Main(string[] args)
{
ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = engine.CreateScope();
MyMethodDel del = new MyMethodDel(MyPrintMethod);
scope.SetVariable("myprintcommand", del);
while(true)
{
Console.Write(">>>");
string line = Console.ReadLine();
ScriptSource script = engine.CreateScriptSourceFromString(line, SourceCodeKind.SingleStatement);
CompiledCode code = script.Compile();
script.Execute(scope);
}
}
void MyPrintMethod(string text)
{
Console.WriteLine(text);
}
Я могу использовать это так:
>>>myprintcommand("Hello World!")
Hello World!
>>>
Это отлично работает. Я хотел знать, является ли это правильным способом / наилучшей практикой делать то, чего я хочу достичь?
Как я могу выставить перегрузки того же метода. Например, если я хотел предоставить такой метод, как myprintcommand (строковый формат, object [] args).
При том способе, которым я сейчас занимаюсь, ключ "myprintcommand" может быть сопоставлен только одному делегату. Поэтому мне придется изменить имя команды / метода, если я хочу показать перегруженную «myprintcommand» интерпретатору. Есть ли другой способ добиться того, чего я хочу?