Можно ли использовать функцию FSharp и преобразовать ее в динамическую функцию, альтернативно, что-то вроде этого подходит к FSharp в будущем?Динамическая функция Вызов в FSharp
let func (a:int) (b:int) : int =
a + b
let dynamicFunc = FSharpFunc.ToDynamicFunc(func)
let argumentList = [1; 2]
let object = dynamicFunc argumentList
let result = object :?> int
Похоже, что вы в настоящее время, чтобы возвратиться к стандартному отражению (как это: calling a F# function by name), однако, этот подход кажется очень хрупким. Главным образом, потому что нет реальной гарантии, что она работает, и вы должны знать, что происходит под обложками.
Нечто подобное может быть использовано для обертывания любой функции и динамического выполнения.
let wrapFun (x:'f) : 'f =
let args = FSharp.Reflection.FSharpType.GetFunctionElements <| x.GetType()
let runner (any:obj list) : obj =
// Do extra things
FSharpFunc.DynamicInvoke x
FSharp.Reflection.FSharpValue.MakeFunction (typeof<'f>, runner) :?> 'f
Не могли бы вы дать более реалистичный вариант использования? Существуют различные способы делать вещи динамически, но я вообще избегал их, если это вообще возможно, потому что они просто облегчают ввод ошибок. В вашем конкретном примере у вас есть функция 'func' со статически известным типом, поэтому ее динамическое обращение не кажется полезным. – kvb
В этом случае я думал о удаленном вызове, когда так называемая завернутая функция собирала аргументы и отправляла их на удаленный компьютер, где он фактически вызывал бы эту функцию. –