作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 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
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()
FSI_0001
的类型中这一事实。 .然而,这是未记录的行为,它可以在下一个版本中改变......
关于module - 我可以获得所有程序模块中不是函数的值的列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803731/
我有一个包含几个模块的程序,比如:moduleA、moduleB 和 moduleC。 而且我还有一个头文件 debug_flags.h 我在其中定义了三个宏: #define DEBUG_MODUL
我是一名优秀的程序员,十分优秀!