gpt4 book ai didi

module - 我可以获得所有程序模块中不是函数的值的列表吗?

转载 作者:行者123 更新时间:2023-12-04 16:54:32 26 4
gpt4 key购买 nike

我的 F# 程序运行良好,但有时我发现很难理解流程。我在许多模块中定义了不是函数的值。当这些模块打开时,这些值被绑定(bind)。我想获取非函数值的所有名称以及它们在哪些模块中声明的列表。这可能吗?

下面的例子可以澄清这个问题。

module A =

let i = 1
let add x y = x + y


module B =
let x = 99.9
let sqr z = z * z

open A
open B

let y =
add (float i) x
|> sqr

printfn "%f" y

是否有函数 foo 可以执行以下操作?
let nonFuncVals = foo()
printfn "%A" nonFuncVals
// ["A.i", "B.x"]

最佳答案

对此没有内置支持。根据您的工作方式,您可能能够以某种骇人听闻的方式做到这一点,但它可能会有很多限制。

以下适用于您的示例,当您使用 F# 交互式运行它时,但我确信它可以通过多种方式中断:

open System.Reflection

let nonFuncVals () =
let special = set [ "it"; "CheckClose"; "LastGenerated" ]
[ for t in Assembly.GetExecutingAssembly().GetTypes() do
if t.FullName.StartsWith "FSI_" then
for p in t.GetProperties() do
if not (special.Contains p.Name) then
if t.FullName.Length <= 8 then yield p.Name
else yield t.FullName.Substring(9) + "." + p.Name ]
|> Seq.distinct

nonFuncVals()

该函数查看当前定义的类型,并利用 F# Interactive 将生成的绑定(bind)放在名称如 FSI_0001 的类型中这一事实。 .然而,这是未记录的行为,它可以在下一个版本中改变......

关于module - 我可以获得所有程序模块中不是函数的值的列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803731/

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