8


2

私は自分の.NETアプリケーションで使用したいRubyとPythonで開発したAPI /クラスをたくさん持っています。 C#でRubyまたはPythonオブジェクトをインスタンス化してそのメソッドを呼び出すことは可能ですか?

IronPythonのようなライブラリはこれとは逆のことをしているようです。 つまり、Pythonで.NETオブジェクトを利用することは許可されていますが、この逆数ではありません。 私はここに何かが足りない?

何か案は?

4 Answer


9


これは Dynamic Language Runtimeが実行することになっている2つのことのうちの1つです:誰もがDLRはCLIで動的言語を実装することをより簡単にするために言語実装者のためのものだ。 しかし、アプリケーションで動的言語を簡単にホストできるようにすることは、アプリケーション作成者にとっても重要です。

DLR以前は、すべての言語に独自のホスティングAPIがありました。 現在、DLRには、_every_言語でも同じように機能し、C#4およびVBで動的に型指定されたオブジェクトをサポートする 標準化されたホスティング仕様があります。 .NET 10では、これまでになく簡単になりました。

// MethodMissingDemo.cs
システムを使用する。 IronRubyを使用する。

クラスプログラム{static void Main(){var ruby​​Engine = Ruby.CreateEngine();} rubyEngine.ExecuteFile( "method_missing_demo.rb");動的グローバル= ruby​​Engine.Runtime.Globals;

動的methodMissingDemo = globals.MethodMissingDemo。@ new();

Console.WriteLine(methodMissingDemo.HelloDynamicWorld());

methodMissingDemo.print_all(args); }}

#method_missing_demo.rbクラスMethodMissingDemo def print_all(args)args.map {| arg |#} arg}を置きます

def method_missing(name、* args)name.to_s.gsub(/([[:lower:] \ d])([[:upper:]])/、 '\ 1 \ 2')end end

ここでは、あらゆる方向にものが流れていくのが見えます。 C#コードはRubyオブジェクトのメソッドを呼び出していますが、これは存在していません。Rubyコードは.NET配列を繰り返し処理してその内容をコンソールに出力しています。


3


C#4.0を待つことができるなら(今すぐベータ版を使うことができます)、それは "dynamic"キーワードと共に来ます、そしてあなたは here


1


http://www.ironruby.net/[IronRuby]とhttp://www.codeplex.com/IronPython[IronPython]の両方で、RubyとPythonのネイティブモジュール、関数、クラスを呼び出すことができます。 どちらも.NETの多かれ少なかれファーストクラスの言語として、特にDLR(動的言語ランタイム)の下でサポートされています。


-1


私はc#からRuby / Pythonを呼び出す方法を見ました。 しかし、それは逆の方が簡単です。