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

5

那么,如何在F#中编写通用的委托声明?

我想获得与此C#声明等效的声明:

public delegate Result<TOutput> Parser<TInput, TValue>(TInput input);

我还没有找到关于如何实现这一点的文档,尽管编写通用委托是相当常见的。

有什么想法或指针吗?

1个回答

8
您可以按照以下方式定义通用委托:
type Parser<'TInput, 'TOutput> = delegate of 'TInput -> Result<'TOutput>

在F#中,泛型参数以单引号开头(以区别于普通类型),因此您需要'TInput
仅供参考,我认为我从未需要在F#中定义委托。我猜它们对于C#互操作仍然有用,但即使是这样,我也可能只会为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>

我不认为我需要在F#中定义委托。 我也是这样想的。 - Guy Coder
2
我确实需要它用于C#互操作 :) - linkerro
据我所知,在通过P/Invoke和在构建用于C/C++ DLL的绑定时,委托是传递函数的唯一方式。当需要将回调传递到DLL时,这是必需的。 - bmitc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接