gpt4 book ai didi

f#-interactive - 如何获取模块中定义的方法?

转载 作者:行者123 更新时间:2023-12-02 01:45:18 29 4
gpt4 key购买 nike

我正在尝试使用来自 Fsi 的 F# 程序集,但似乎无法找到一种方法来获取模块中定义的方法列表以便调用它们。

这是我尝试使用的示例文件。在关注 "exposing methods that are cross language friendly" ,我在文件顶部添加了一个命名空间,并添加了一个模块来包含之前存在的 let 绑定(bind)方法。如果可能,我想避免将所有内容移动到静态类中。

我能否使用反射,或以其他方式编写模块以帮助我找到可用的方法和方法的正确大小写?

最佳答案

如果我正确理解了这个问题,我会按如下方式进行:

1) 获取所需的程序集。比如当前正在执行的程序集可以通过

System.Reflection.Assembly.GetExecutingAssembly

2) 然后我将通过调用 GetTypes 获取在获得的程序集中定义的所有类型。如果你想过滤掉模块,你可以写类似的东西。

let modules = Array.filter (fun x -> FSharpType.IsModule x) (assembly.GetTypes())

可以找到 FSharpType 类的文档 here .它包含在 Microsoft.FSharp.Reflection 命名空间中。

3) 之后,您可以通过在单个模块上调用GetMethods 方法来获取模块中的方法。例如,要将它们全部打印出来,您可以这样写:

let methods = [| for t in modules do for m in t.GetMethods() -> m |]
for m in methods do
printfn "%A" m

methods 是一个包含 MethodInfo 元素的数组。 GetMethods 采用 BindingFlags 类型的可选参数可以过滤掉一些方法。看看 documentation .

您还可以通过调用 MethodInfo 对象的 Invoke 方法来调用操作。

希望这有用。

关于f#-interactive - 如何获取模块中定义的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26019256/

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