我可以编写一个返回作为参数给出的函数名称的函数吗?
let funName f: string =
// returns the name of f.
例如,如果我通过printfn
作为 funName 的参数,它返回“printfn”。
> funName printfn;;
val it : string = "printfn"
编辑:我想写一个函数doc
它返回与给定函数关联的 XML 文档。
let doc f = // returns the XML documentation of the function `f`.
使用类似的方法检索函数的摘要NuDoq,我想知道函数的名称。
我无法想象你为什么要这样做,而且我认为没有办法通过反思来做到这一点,但是F# 代码引用可能会让你成功一半。
open Microsoft.FSharp.Quotations
let rec funName = function
| Patterns.Call(None, methodInfo, _) -> methodInfo.Name
| Patterns.Lambda(_, expr) -> funName expr
| _ -> failwith "Unexpected input"
let foo () = 42
funName <@ foo @> // "foo"
但请注意,某些预定义的库函数具有不同的内部名称。
funName <@ printfn @> // "PrintFormatLine"
funName <@ id @> // "Identity"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)