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

jjjwad0x  于 2023-01-25  发布在  Ruby
关注(0)|答案(4)|浏览(250)

我有很多用Ruby和Python开发的API/类,我想在我的. NET应用程序中使用它们。是否可以用C#示例化Ruby或Python对象并调用其方法?
看起来像IronPython这样的库做的与此相反。意思是,它们允许Python利用. NET对象,但不是我正在寻找的这一点的倒数...我在这里错过了什么吗?
有什么想法吗?

6ie5vjzr

6ie5vjzr1#

这是Dynamic Language Runtime应该做的两件事之一:每个人都认为DLR只是为了语言实现者,使在CLI上实现动态语言更容易。2但是,它也是为了应用程序编写者,使在他们的应用程序中托管动态语言更容易。
在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 = 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数组上迭代,并将其内容打印到控制台。

zaqlnxep

zaqlnxep2#

如果您可以等待C#4.0(您现在可以使用beta),它将附带“dynamic”关键字,您可以调用IronRuby或IronPython代码,如here所述。

lndjwyie

lndjwyie3#

IronRubyIronPython都允许你调用Ruby和Python的原生模块、函数和类,它们都是.NET中的一级语言,特别是在DLR(动态语言运行库)中。

5jvtdoz2

5jvtdoz24#

我见过从c#调用Ruby / Python的方法,但反过来更容易。

相关问题