2010-06-03 48 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"));