C#,F#,Ironpython和Ironruby的整合
-
24-10-2019 - |
题
有人告诉我,当将C#和F#源制成的组件文件被编译为.NET组件时,它们是可互操作的。
- Q1:这是否意味着C#可以像C#函数一样调用F#函数?
- Q2:Ironpython和Ironruby怎么样?我看不到Ironpython/Ironruby的任何组件DLL。
- Q3:有什么简单的方法可以使用C#或F#的Ironpython/IronRuby功能?
任何示例代码都很棒。
解决方案
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站点提供。
其他提示
有人告诉我,当将C#和F#源制成的组件文件被编译为.NET组件时,它们是可互操作的。
是的,您可以在C#中引用F#组件。引用时,f#对象等将像c#一个一样起作用。
您也可以在C#中访问Ironpython/Ruby代码,尽管它与仅引用一个组件有所不同。这是一个示例:
http://www.highoncoding.com/articles/573_first_look_at_the_ironruby.aspx
Q3:有什么简单的方法可以使用C#或F#的Ironpython/IronRuby功能?
你可能会看 将Ironpython嵌入C#应用
基本上,它的作用(简化代码):
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"));
不隶属于 StackOverflow