Благодаря предложениям из предыдущего вопроса, Я пытаюсь использовать IronPython, IronRuby и Boo для создания DSL для моего приложения C #. Шаг первый - IronPython из-за большего количества пользователей и базы знаний. Если я могу заставить что-то здесь хорошо работать, я могу просто остановиться.
Вот моя проблема:
Я хочу, чтобы мой скрипт IronPython имел доступ к функциям класса Lib. Прямо сейчас я могу добавить сборку в среду выполнения IronPython и импортировать класс, выполнив оператор в созданной мной области:
// load 'ScriptLib' assembly
Assembly libraryAssembly = Assembly.LoadFile(libraryPath);
_runtime.LoadAssembly(libraryAssembly);
// import 'Lib' class from 'ScriptLib'
ScriptSource imports = _engine.CreateScriptSourceFromString("from ScriptLib import Lib", SourceCodeKind.Statements);
imports.Execute(_scope);
// run .py script:
ScriptSource script = _engine.CreateScriptSourceFromFile(scriptPath);
script.Execute(_scope);
Если я хочу запустить Lib :: PrintHello, который является просто оператором в стиле hello world, мой скрипт Python содержит:
Lib.PrintHello()
или (если не статично):
library = new Lib()
library.PrintHello()
Как я могу изменить свою среду так, чтобы я мог просто иметь базовые состояния в скрипте Python следующим образом:
PrintHello
TurnOnPower
VerifyFrequency
TurnOffPower
etc...
Я хочу, чтобы эти сценарии было легко написать непрограммисту. Я не хочу, чтобы они знали, что такое класс и как он работает. IronPython действительно существует, поэтому некоторые базовые операции, такие как for, do, if и определение базовой функции, не требуют написания компилятора для моего DSL.