你如何写一个通用的F#委托声明?

lin*_*rro 4 f# c#-to-f#

那么,你如何在f#中编写泛型委托声明?

我想得到相当于这个c#声明:

public delegate Result<TOutput> Parser<TInput, TValue>(TInput input);
Run Code Online (Sandbox Code Playgroud)

我无法找到有关如何实现这一目标的文档,尽管必须编写泛型委托是很常见的.

任何想法或指针?

Tom*_*cek 7

您可以按如下方式定义通用委托:

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)

  • 我确实需要它用于 c# 互操作 :) (2认同)