Итак, я принимаю IronPython в своем приложении C#. IronPhyton используется для реализации DSL для пользователей. Синтаксис DSL должен быть чем-то вроде этого:Вызов функции с именованными аргументами в размещенном приложении
Ping(Message = "testOne1")
хостинг код выглядит следующим образом:
var engine = Python.CreateEngine();
var scope = engine.CreateScope();
Action<string> ping = (message) => Console.WriteLine(message.ToString());
scope.SetVariable("Ping", ping);
var script = @"
Ping(Message = ""testOne1"")
";
engine.Execute(script, scope);
Но это не работает, потому что Action<string>
не сохраняет имя аргумента. Вызов его без имени параметра работает должным образом:
Ping("testOne1")
Как сохранить функцию и вызвать ее с помощью названных аргументов?
Попробуйте использовать 'obj' вместо имени. Это имя переменной в типе делегирования. –
'obj' не выглядит хорошо для DSL пользователя :). На самом деле, если нет способа указать имя аргумента, если будет просто использовать синтаксис 'Ping (" testOne1 ")'. –