在f#中将函数的名称作为字符串调用

b1g*_*ar5 5 f# quotations

我以为我可以用引号做到这一点 - 但我看不出怎么做.

我应该只使用一个功能表和他们的名字 - 或者他们是这样做的一种方式?

谢谢.

欲了解更多信息......

我从excel调用了很多f#函数,我想知道我是否可以编写af#函数

让fs_wrapper(f_name:string)(f_params:list double)=这个位用f_params调用fname

然后使用

= fs_wrapper("my_func",3.14,2.71)

在工作表中而不是分别包装所有功能.

Tom*_*cek 10

您需要使用标准的.NET Reflection来执行此操作.引用不会有帮助,因为它们代表使用标准.NET的函数调用MethodInfo,因此您无论如何都需要使用反射.引用的唯一好处(与天真的反射相比)是你可以编译它们,这可以给你更好的性能(但编译并不完美).

根据您的具体情况(例如,功能位于何处),您必须执行以下操作:

module Functions =
  let sin x = sin(x)
  let sqrt y = sqrt(y)

open System.Reflection

let moduleInfo = 
  Assembly.GetExecutingAssembly().GetTypes()
  |> Seq.find (fun t -> t.Name = "Functions")

let name = "sin"
moduleInfo.GetMethod(name).Invoke(null, [| box 3.1415 |])
Run Code Online (Sandbox Code Playgroud)

除非您需要一些可扩展性或具有大量函数,否则使用包含字符串作为键的字典和函数值作为值可能是一个更容易的选项:

let funcs = 
  dict [ "sin", Functions.sin;
         "sqrt", Functions.sqrt ]

funcs.[name](3.1415)
Run Code Online (Sandbox Code Playgroud)