3
那麼,你如何在f#中編寫泛型委託聲明呢?你如何寫一個通用的F#委託聲明?
我想這個C#的聲明等價:
public delegate Result<TOutput> Parser<TInput, TValue>(TInput input);
我一直沒能找到關於如何實現這一提議的文件,儘管這是一個很常見的寫泛型委託。
任何想法或指針?
那麼,你如何在f#中編寫泛型委託聲明呢?你如何寫一個通用的F#委託聲明?
我想這個C#的聲明等價:
public delegate Result<TOutput> Parser<TInput, TValue>(TInput input);
我一直沒能找到關於如何實現這一提議的文件,儘管這是一個很常見的寫泛型委託。
任何想法或指針?
如下您可以定義一個通用的委託:
type Parser<'TInput, 'TOutput> = delegate of 'TInput -> Result<'TOutput>
在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>
'我不認爲我需要在F#中定義一個委託。我也不。 –
我確實需要它爲c#interop :) – linkerro