Dzięki sugestiom z previous question, jestem zajęty wypróbowywanie IronPython, IronRuby i Boo, aby utworzyć DSL dla mojej aplikacji C#. Pierwszym krokiem jest IronPython, ze względu na większą bazę użytkowników i wiedzy. Jeśli uda mi się coś dobrze tu wykorzystać, mogę po prostu przestać.Simplfying DSL napisane dla aplikacji C# z IronPythonem
Oto mój problem:
Chcę, aby mój skrypt IronPython mieć dostęp do funkcji w klasie o nazwie Lib. Teraz mogę dodać zespół do wykonywania IronPython i zaimportować klasę wykonując oświadczenie w zakresie I Utworzono:
// 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);
jeśli chcę uruchomić Lib :: PrintHello, który jest po prostu stwierdzenie hello world styl mój skrypt Pythona zawiera:
Lib.PrintHello()
lub (jeśli to nie jest statyczna):
library = new Lib()
library.PrintHello()
Jak mogę zmienić swoje otoczenie tak, że mogę tylko mieć podstawowe statments w skrypcie Pythona jak jes s:
PrintHello
TurnOnPower
VerifyFrequency
TurnOffPower
etc...
Chcę, aby te skrypty były proste do napisania przez programistę. Nie chcę, żeby musieli wiedzieć, czym jest lekcja i jak to działa. IronPython jest właśnie tam, więc niektóre podstawowe operacje, takie jak, czy, jeśli i podstawowa definicja funkcji nie wymagają mojego pisania kompilatora dla mojego DSL.
Wygląda nawet brzydsze w IronRuby gdzie muszę napisać ScriptLib :: Lib.PrintHello() Czy ktoś zna obu IronRuby i IronPython w ten sposób? Czy potrzebuję skryptu konfiguracyjnego Pythona do mapowania wszystkich metod/zmiennych przed uruchomieniem skryptu testowego? Miałem nadzieję, że zrobię to w C#. – cgyDeveloper