我有很多APIs /類,我已經在Ruby和Python中開發,我想在我的.NET應用程序中使用。是否有可能在C#中實例化一個Ruby或Python對象並調用它的方法?在C#.NET中調用Ruby或Python API
似乎像IronPython這樣的庫與此相反。意思是,它們允許Python使用.NET對象,但不是這個我正在尋找的對象......我在這裏錯過了什麼嗎?
任何想法?
我有很多APIs /類,我已經在Ruby和Python中開發,我想在我的.NET應用程序中使用。是否有可能在C#中實例化一個Ruby或Python對象並調用它的方法?在C#.NET中調用Ruby或Python API
似乎像IronPython這樣的庫與此相反。意思是,它們允許Python使用.NET對象,但不是這個我正在尋找的對象......我在這裏錯過了什麼嗎?
任何想法?
這是Dynamic Language Runtime應該做的兩件事情之一:每個人都認爲DLR僅適用於語言實現者,以便在CLI上實現動態語言。但是,它也適用於應用程序編寫者,以便更容易地在其應用程序中託管動態語言。
在DLR之前,每種語言都有自己的託管API。現在,DLR有standardized hosting specification的作品同樣爲每語言,並與在C#動態類型對象的支持4和VB.NET 10,它變得比以往更容易:
// MethodMissingDemo.cs
using System;
using IronRuby;
class Program
{
static void Main()
{
var rubyEngine = Ruby.CreateEngine();
rubyEngine.ExecuteFile("method_missing_demo.rb");
dynamic globals = rubyEngine.Runtime.Globals;
dynamic methodMissingDemo = [email protected]();
Console.WriteLine(methodMissingDemo.HelloDynamicWorld());
methodMissingDemo.print_all(args);
}
}
# method_missing_demo.rb
class MethodMissingDemo
def print_all(args)
args.map {|arg| puts arg}
end
def method_missing(name, *args)
name.to_s.gsub(/([[:lower:]\d])([[:upper:]])/,'\1 \2')
end
end
在這裏,你看到的東西在每個可能的方向傳遞。 C#代碼正在調用Ruby對象上的方法,該方法甚至不存在,Ruby代碼正在遍歷.NET數組並將其內容打印到控制檯。
我已經看到了從c#調用Ruby/Python的方法。但相反,它更容易。
如果你看過這個,它是怎麼做的?在這種情況下,我反過來也不容易。 – robotshapes 2009-11-05 22:44:44
如果您可以等待C#4.0(您現在可以使用測試版),它將帶有「dynamic」關鍵字,您可以按照here所述調用IronRuby或IronPython代碼。
IronRuby和IronPython都允許您調用Ruby和Python原生模塊,函數和類。兩者在.NET中都或多或少地支持一流的語言,特別是在DLR(動態語言運行時)下。
您不會看到相反的結果,因爲它通常不會反向進行。我想說的是,Python/C和Jython/Java也會出現同樣的情況。 – Min 2009-11-05 22:57:06
@Min,C和Python都可以同時使用。事實上,我對Python的介紹是將它嵌入到C應用程序中。 – 2009-11-05 23:11:14