Могу ли я использовать делегатов непосредственно в дискриминационном объединении в F #? - PullRequest
1 голос
/ 13 января 2020

У меня есть следующее:

type CallbackString = delegate of string -> unit
type CallbackByte = delegate of byte[] -> unit

type CallbackType =
| String of CallbackString
| Byte of CallbackByte

, поскольку у меня может быть добавлено много типов, есть ли синтаксис для выполнения чего-то похожего на это (что компилируется):

type CallbackType =
| String of (delegate of string -> unit)
| Byte of (delegate of byte[] -> unit)

1 Ответ

3 голосов
/ 13 января 2020

Если это API, используемый полностью из F #, вы можете избежать создания делегатов и напрямую использовать функции в качестве значений первого класса:

type CallbackType =
| String of (string -> unit)
| Byte of (byte[] -> unit)

Если это будет использоваться с C#, и вы хотите для указания типов делегатов c, альтернативой может быть использование предопределенных делегатов Action и Func в типах пространства имен System для обработки этого:

// Assumes 
// open System

type CallbackType =
| String of Action<string>
| Byte of Action<byte[]>
...