在C#.NET中调用Ruby或Python API

在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

我有很多用Ruby和Python开发的API/类,我想在我的.NET应用程序中使用它们。是否可以在C#中实例化Ruby或Python对象并调用其方法

像IronPython这样的库似乎与此相反。这意味着,它们允许Python利用.NET对象,但不是我所寻找的这个对象的倒数。。。我是不是遗漏了什么


有什么想法吗?

我见过从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应用程序中。