C#、F#、Ironpython、Ironrubyの統合
-
24-10-2019 - |
質問
C#およびF#ソースから作成されたアセンブリファイルは、.NETアセンブリにコンパイルされるため、相互運用可能であると言われました。
- Q1:それは、C#がC#関数と同じようにF#関数を呼び出すことができることを意味しますか?
- Q2:IronpythonとIronrubyはどうですか? Ironpython/IronrubyからアセンブリDLLは表示されません。
- Q3:C#またはF#からIronpython/Ironruby機能を使用する簡単な方法はありますか?
どんな例コードでも素晴らしいでしょう。
解決
1)はい。 F#で簡単な例を使用して、C#コンソールアプリの主な方法を呼び出すことができます。
open SampleApp
SampleApp.Program.Main([| "Hello"; "World" |])
2)DLRの場合、物事は少し違うと思います。これがPythonを実行する方法だと思います(たとえば)。
ScriptEngine engine = Python.CreateEngine();
ScriptSource script = engine.CreateScriptFromSourceFile("myPythonScript.py");
ScriptScope scope = engine.CreateScope();
script.Execute(scope);
私の構文は少し外れているかもしれませんが、要点を取得できるはずです。
3)いくつかの特別なDLR DLLをダウンロードする必要があります - そして、相互運用可能にするために、C# / F#アプリケーションでそれらを参照してください。 Microsoft DLRサイトから入手できるはずです。
他のヒント
C#およびF#ソースから作成されたアセンブリファイルは、.NETアセンブリにコンパイルされるため、相互運用可能であると言われました。
はい、C#1でF#アセンブリを参照できます。 F#オブジェクトなどは、参照するときにC#のオブジェクトのように機能します。
C#でもIronpython/Rubyコードにアクセスできますが、アセンブリを参照することとは少し異なります。これが例です:
http://www.highoncoding.com/articles/573_first_look_at_the_ironruby.aspx
Q3:C#またはF#からIronpython/Ironruby機能を使用する簡単な方法はありますか?
あなたは見ているかもしれません IronpythonをC#アプリケーションに埋め込みます
基本的に、それがすること(簡素化されたコード):
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"));
所属していません StackOverflow