我正在尝试用F#设计一个库.该库应该对F#和C#都很友好.
这就是我被困住的地方.我可以使它F#友好,或者我可以使它C#友好,但问题是如何使它友好的两者.
这是一个例子.想象一下,我在F#中有以下功能:
let compose (f: 'T -> 'TResult) (a : 'TResult -> unit) = f >> a
Run Code Online (Sandbox Code Playgroud)
这完全可以从F#中使用:
let useComposeInFsharp() =
let composite = compose (fun item -> item.ToString) (fun item -> printfn "%A" item)
composite "foo"
composite "bar"
Run Code Online (Sandbox Code Playgroud)
在C#中,该compose函数具有以下签名:
FSharpFunc<T, Unit> compose<T, TResult>(FSharpFunc<T, TResult> f, FSharpFunc<TResult, Unit> a);
Run Code Online (Sandbox Code Playgroud)
但当然我不想FSharpFunc签名,我想要的是Func,Action而是像这样:
Action<T> compose2<T, TResult>(Func<T, TResult> f, Action<TResult> a);
Run Code Online (Sandbox Code Playgroud)
为此,我可以创建这样的compose2函数:
let compose2 (f: Func<'T, 'TResult>) (a : Action<'TResult> ) …Run Code Online (Sandbox Code Playgroud) 我正在玩F#和C#,并希望从C#调用F#代码.
我设法让它在Visual Studio中以相反的方式工作,方法是在同一个解决方案中有两个项目,并在F#项目中添加C#代码的引用.这样做之后,我可以调用C#代码,甚至在调试时逐步执行它.
我想要做的是F#代码来自C#而不是来自F#的C#代码.我在C#项目中添加了对F#项目的引用,但它的工作方式与以前不同.我想知道如果不手动完成这是否可行.