gpt4 book ai didi

f# - 我可以在 f# 中按名称调用函数吗?

转载 作者:行者123 更新时间:2023-12-04 14:00:54 24 4
gpt4 key购买 nike

有没有办法在 F# 中按名称调用函数?给定一个字符串,我想从全局命名空间(或者,一般来说,一个给定的模块)中提取一个函数值,然后调用它。我已经知道函数的类型。

我为什么要这样做?我正在尝试解决 fsi 没有 --eval 选项的问题。我有一个脚本文件,它定义了许多 int->() 函数,我想执行其中一个。像这样:

fsianycpu --use:script_with_many_funcs.fsx --eval "analyzeDataSet 1"

我的想法是写一个蹦床脚本,比如:
fsianycpu --use:script_with_many_funcs.fsx trampoline.fsx analyzeDataSet 1

为了编写“trampoline.fsx”,我需要按名称查找函数。

最佳答案

对此没有内置函数,但您可以使用 .NET 反射来实现它。这个想法是搜索当前程序集中可用的所有类型(这是编译当前代码的位置)并动态调用具有匹配名称的方法。如果你在一个模块中有这个,你也必须检查类型名称。

// Some sample functions that we might want to call
let hello() =
printfn "Hello world"

let bye() =
printfn "Bye"

// Loader script that calls function by name
open System
open System.Reflection

let callFunction name =
let asm = Assembly.GetExecutingAssembly()
for t in asm.GetTypes() do
for m in t.GetMethods() do
if m.IsStatic && m.Name = name then
m.Invoke(null, [||]) |> ignore

// Use the first command line argument (after -- in the fsi call below)
callFunction fsi.CommandLineArgs.[1]

当被以下调用时,它会运行 hello world:
fsi --use:C:\temp\test.fsx --exec -- "hello"

关于f# - 我可以在 f# 中按名称调用函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21909506/

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