我有很多用Ruby和Python开发的API/类,我想在我的. NET应用程序中使用它们。是否可以用C#示例化Ruby或Python对象并调用其方法?看起来像IronPython这样的库做的与此相反。意思是,它们允许Python利用. NET对象,但不是我正在寻找的这一点的倒数...我在这里错过了什么吗?有什么想法吗?
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数组上迭代,并将其内容打印到控制台。
zaqlnxep2#
如果您可以等待C#4.0(您现在可以使用beta),它将附带“dynamic”关键字,您可以调用IronRuby或IronPython代码,如here所述。
lndjwyie3#
IronRuby和IronPython都允许你调用Ruby和Python的原生模块、函数和类,它们都是.NET中的一级语言,特别是在DLR(动态语言运行库)中。
5jvtdoz24#
我见过从c#调用Ruby / Python的方法,但反过来更容易。
4条答案
按热度按时间6ie5vjzr1#
这是Dynamic Language Runtime应该做的两件事之一:每个人都认为DLR只是为了语言实现者,使在CLI上实现动态语言更容易。2但是,它也是为了应用程序编写者,使在他们的应用程序中托管动态语言更容易。
在DLR出现之前,每种语言都有自己的宿主API,而现在,DLR有了一个standardized hosting specification,它对 * 每种 * 语言都是一样的,并且支持C# 4和VB.NET 10中的动态类型对象,这比以往任何时候都容易:
这里你可以看到东西在各个可能的方向上传递,C#代码调用Ruby对象上的一个方法,* 这个方法根本不存在 *,Ruby代码在一个.NET数组上迭代,并将其内容打印到控制台。
zaqlnxep2#
如果您可以等待C#4.0(您现在可以使用beta),它将附带“dynamic”关键字,您可以调用IronRuby或IronPython代码,如here所述。
lndjwyie3#
IronRuby和IronPython都允许你调用Ruby和Python的原生模块、函数和类,它们都是.NET中的一级语言,特别是在DLR(动态语言运行库)中。
5jvtdoz24#
我见过从c#调用Ruby / Python的方法,但反过来更容易。