2010-06-03 44 views
5

我被告知由C#和F#源代码生成的程序集文件可以在编译为.NET程序集时互操作。C#,F#,IronPython和IronRuby的集成

  • Q1:这是否意味着C#可以像调用C#函数一样调用F#函数?
  • 问题2:IronPython和IronRuby如何?我没有看到来自IronPython/IronRuby的任何程序集DLL。
  • Q3:有没有简单的方法使用C#或F#中的IronPython/IronRuby函数?

任何示例代码都会很棒。

回答

5

1)是。使用一个简单的例子,在F#,我可以调用一个C#控制台应用程序的主要方法:)

open SampleApp 

SampleApp.Program.Main([| "Hello"; "World" |]) 

2对于DLR,我认为事情是有点不同。我相信这是你如何执行Python(例如);

ScriptEngine engine = Python.CreateEngine(); 
ScriptSource script = engine.CreateScriptFromSourceFile("myPythonScript.py"); 
ScriptScope scope = engine.CreateScope(); 

script.Execute(scope); 

我的语法可能有点偏差 - 但你应该能够得到要点。 3)您需要下载一些特殊的DLR DLL - 然后在您的C#/ F#应用程序中引用它们以便可互操作。它们应该可以从Microsoft DLR站点获得。

3

有人告诉我,从C#和F#源所做的汇编文件 是 可互操作的,因为他们被编译成 .NET程序集。

是的,你可以在C#中引用F#程序集。当你引用它们时,F#对象等将像C#一样工作。

您也可以在C#中使用IronPython/Ruby代码,虽然它与引用程序集有点不同。下面是一个例子:

http://www.highoncoding.com/Articles/573_First_Look_at_the_IronRuby.aspx

2

问题3:是否有任何简单的方法从C#或F#使用IronPython/IronRuby函数?

你可能有一个看Embedding IronPython into a C# application

基本上,它做什么(简化代码):

var engine = Python.CreateEngine(); 
var scriptSource = engine.CreateScriptSourceFromString(@" 
def foo(s): 
    print s", SourceCodeKind.Statements); 

var scope = engine.CreateScope(); 
scriptSource.Execute(scope); 

//Get a reference to the function 
Func<string, decimal> foo = scope.GetVariable<Func<string, decimal>>("foo"); 

//Execute it 
Console.WriteLine(foo("a"));