Integrazione di C #, F #, IronPython e IronRuby
-
24-10-2019 - |
Domanda
mi è stato detto che i file di montaggio a base di C # e F # fonte è interoperabile in quanto sono compilate in NET assemblaggio.
- Q1:? Questo significa che C # può chiamare F # funziona esattamente come sono C # funzioni
- Q2: Come circa l'IronPython e IronRuby? Non vedo alcun dll assembly dal IronPython / IronRuby.
- Q3:? C'è un modo semplice per utilizzare le funzioni di IronPython / IronRuby da C # o F #
Ogni codice di esempio sarebbe grande.
Soluzione
1) Sì. Utilizzando un semplice esempio, in F #, posso richiamare il metodo principale di un'applicazione C # console:
open SampleApp
SampleApp.Program.Main([| "Hello"; "World" |])
2) Per la DLR, penso che le cose sono un po 'diverso. Credo che questo sia il modo si eseguirà Python (per esempio);
ScriptEngine engine = Python.CreateEngine();
ScriptSource script = engine.CreateScriptFromSourceFile("myPythonScript.py");
ScriptScope scope = engine.CreateScope();
script.Execute(scope);
La mia sintassi può essere spento un po '-. Ma si dovrebbe essere in grado di ottenere il succo
3) È necessario scaricare alcune DLL speciali DLR - e poi fare riferimento in C # / F # applicazione al fine di essere interoperabili. Essi dovrebbero essere disponibili sul sito Microsoft DLR.
Altri suggerimenti
mi è stato detto che i file di assemblaggio a base di C # e F # è fonte interoperabile come sono compilati in .NET assemblaggio.
Sì, si può fare riferimento a un F # assemblaggio in un C # uno. La F # oggetti ecc funzionerà come C # quelli quando li si fa riferimento.
È possibile accedere al codice IronPython / Ruby in C # troppo, anche se è un po 'diverso di un semplice riferimento a un assembly. Ecco un esempio:
http://www.highoncoding.com/Articles/573_First_Look_at_the_IronRuby.aspx
Q3:? C'è un modo semplice per utilizzare le funzioni di IronPython / IronRuby da C # o F #
Si potrebbe avere uno sguardo a Incorporare IronPython in un # applicazione C
In sostanza, ciò che fa (codice semplificato):
var engine = Python.CreateEngine();
var scriptSource = engine.CreateScriptSourceFromString(@"
def foo(s):
print s", SourceCodeKind.Statements);
var scope = engine.CreateScope();
scriptSource.Execute(scope);
//Get a reference to the function
Func<string, decimal> foo = scope.GetVariable<Func<string, decimal>>("foo");
//Execute it
Console.WriteLine(foo("a"));