显示fsi中的功能文档

时间:2018-12-18 15:23:42

标签: f# f#-interactive

是否可以使name = "Onnuu" name = name.lower() names = set(name) print(names) l = [] for i in names: l.append((name.count(i),i)) l.sort(reverse = True) for i in l: if l[0][0] == i[0]: print(i[1]) 打印功能文档?

我可以通过仅将函数评估为值来检索类型,但是我想知道xml文档说的话(如果存在)。

1 个答案:

答案 0 :(得分:2)

在没有用例的情况下,我有2条建议。如果仅是帮助,请使用FSX文件。

如果您实际上想打印出FSI中的文档,则可以使用以下代码为成员打印文档。由于xml注释未存储在dll中,因此该代码检查xml位置中是否存在xml文档,如果存在则将其加载。

#r "packages/Newtonsoft.Json/lib/net45/Newtonsoft.Json.dll"

open System.IO
open System.Xml
open System.Reflection

let loadXml (path:string) =
  if (File.Exists(path)) then 
    let xml = new XmlDocument()
    xml.Load(path)
    Some xml
  else None

let xmlForMember (maybeXml:XmlDocument option) (mi:MemberInfo) =
  let path = sprintf "M:%s.%s" mi.DeclaringType.FullName mi.Name
  match maybeXml with
  | None -> None
  | Some xml -> xml.SelectSingleNode("//member[starts-with(@name, '" + path + "')]") |> Some

let docFrom (node:XmlNode option) =
  match node with
  | None -> "No docs available"
  | Some n -> n.InnerXml

用法将是这样,但您可以根据需要进行整理和打包:

let t = typedefof<Newtonsoft.Json.JsonSerializer>
let assembly = t.Assembly
let dllPath = assembly.Location
printfn "Assembly location: %s" dllPath
let expectedXmlPath = Path.ChangeExtension(dllPath, ".xml")
printfn "Expected xml: %s" expectedXmlPath
let xmlDoc = expectedXmlPath |> loadXml
let mi = t.GetMember("Create").[0]

let docNode = mi |> xmlForMember xmlDoc

docNode |> docFrom |> printfn "%s"

希望这可以帮助您入门。