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.

È stato utile?

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"));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top