那么,你如何在f#中编写泛型委托声明?
我想得到相当于这个c#声明:
public delegate Result<TOutput> Parser<TInput, TValue>(TInput input);
Run Code Online (Sandbox Code Playgroud)
我无法找到有关如何实现这一目标的文档,尽管必须编写泛型委托是很常见的.
任何想法或指针?
您可以按如下方式定义通用委托:
type Parser<'TInput, 'TOutput> = delegate of 'TInput -> Result<'TOutput>
Run Code Online (Sandbox Code Playgroud)
在F#中,通用参数在开头用单引号编写(以区别于普通类型),这就是您需要的原因'TInput.
仅仅为了记录,我认为我不需要在F#中定义委托.我猜它们对C#interop仍然有用,但即便如此,我可能只是为Func委托定义一个类型别名,或者(当你不打算从C#调用它时,只是一个普通的F#函数):
// Alias for a standard .NET delegate
type Parser<'TInput, 'TOutput> = System.Func<'TInput, Result<'TOutput>>
// Alias for a normal F# function
type Parser<'TInput, 'TOutput> = 'TInput -> Result<'TOutput>
Run Code Online (Sandbox Code Playgroud)