gpt4 book ai didi

f# - 在 f# 中以字符串的形式调用函数

转载 作者:行者123 更新时间:2023-12-04 16:55:45 25 4
gpt4 key购买 nike

我以为我可以用引号来做到这一点 - 但我不知道怎么做。

我应该只使用带有名称的函数表 - 还是他们这样做的一种方式?

谢谢。

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

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

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

然后使用

=fs_wrapper("my_func", 3.14, 2.71)

在工作表中,而不是单独包装所有功能。

最佳答案

您需要使用标准的 .NET 反射来执行此操作。引用不会有帮助,因为它们表示使用标准 .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 |])

除非您需要一些可扩展性或拥有大量函数,否则使用包含字符串作为键和函数值作为值的字典可能是一个更简单的选择:
let funcs = 
dict [ "sin", Functions.sin;
"sqrt", Functions.sqrt ]

funcs.[name](3.1415)

关于f# - 在 f# 中以字符串的形式调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6232859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com