在C#.NET中调用Ruby或Python API
我有很多用Ruby和Python开发的API/类,我想在我的.NET应用程序中使用它们。是否可以在C#中实例化Ruby或Python对象并调用其方法 像IronPython这样的库似乎与此相反。这意味着,它们允许Python利用.NET对象,但不是我所寻找的这个对象的倒数。。。我是不是遗漏了什么在C#.NET中调用Ruby或Python API,c#,.net,python,ruby,C#,.net,Python,Ruby,我有很多用Ruby和Python开发的API/类,我想在我的.NET应用程序中使用它们。是否可以在C#中实例化Ruby或Python对象并调用其方法 像IronPython这样的库似乎与此相反。这意味着,它们允许Python利用.NET对象,但不是我所寻找的这个对象的倒数。。。我是不是遗漏了什么 有什么想法吗?我见过从c#调用Ruby/Python的方法。但是反过来更容易。如果您可以等待C#4.0(您现在可以使用测试版),它将附带“dynamic”关键字,您可以按所述调用IronRuby或Iro
有什么想法吗?我见过从c#调用Ruby/Python的方法。但是反过来更容易。如果您可以等待C#4.0(您现在可以使用测试版),它将附带“dynamic”关键字,您可以按所述调用IronRuby或IronPython代码。这是应该做的两件事之一:每个人都认为DLR只是供语言实现者使用,以便更容易在CLI上实现动态语言。但是,对于应用程序编写者来说,也可以更轻松地在应用程序中托管动态语言 在DLR之前,每种语言都有自己的宿主API。现在,DLR有一个对每种语言都适用的功能,并且支持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 = globals.MethodMissingDemo.@new();
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数组上迭代并将其内容打印到控制台。两者都允许您调用Ruby和Python本机模块、函数和类。在.NET中,特别是在DLR(动态语言运行时)下,这两种语言都或多或少地作为一流语言受到支持。如果您已经看到了这一点,它是如何实现的?在这种情况下,我不容易用另一种方式来做。你看不到相反的情况,因为它通常不是用相反的方式来做的。我想说的是,Python/C和Jython/Java也会出现同样的情况。@Min、C和Python是双向工作的。事实上,我对Python的介绍是将其嵌入到C应用程序中。