如何以编程方式访问DocString?

6

我正在编写一个宏,它会获取一个函数名并声明该函数的一些其他版本。我想让这些变体拥有与原始方法相同的文档字符串,可能还有一些更改。

为了做到这一点,我需要检索原始方法的文档字符串。

因此,我需要一个函数:

get_docstring(functionname::Symbol, argtypes)::String

这样我就可以执行:

julia> s=get_docstring(:values,(Associative,))然后s将被设置为:

s="""
    values(a::Associative)
Return an iterator over all values in a collection.
`collect(values(d))` returns an array of values.
```jldoctest
julia> a = Dict('a'=>2, 'b'=>3)
Dict{Char,Int64} with 2 entries:
  'b' => 3
  'a' => 2
julia> collect(values(a))
2-element Array{Int64,1}:
 3
 2
```
"""

2
Try Base.Docs.doc - Isaiah Norton
1个回答

4
你可以使用@doc宏,但是它返回的不是字符串,而是一个markdown对象:
julia> @doc "foo int" ->
       foo(x::Int) = x
foo

julia> @doc "foo float" ->
       foo(x::Float64) = x
foo

julia> @doc "foo sym" ->
       foo(x::Symbol) = x
foo

julia> @doc "foo x, y" ->
       function foo(x, y) x, y end
foo

julia> @doc foo
  foo int

  foo float

  foo sym

  foo x, y

julia> typeof(ans)
Base.Markdown.MD

julia> @doc foo(::Int)
  foo int

julia> @doc foo(::Float64)
  foo float

julia> @doc foo(::Symbol)
  foo sym

julia> md = @doc foo(::Any, ::Any)
  foo x, y

julia> md.content
1-element Array{Any,1}:
 foo x, y

julia> md.content[1]
  foo x, y

julia> md.content[1].content
1-element Array{Any,1}:
 Base.Markdown.Paragraph(Any["foo x, y"])

julia> md.meta
Dict{Any,Any} with 3 entries:
  :typesig => Tuple{Any,Any}
  :results => Base.Docs.DocStr[Base.Docs.DocStr(svec("foo x, y"),foo x, y…
  :binding => foo

julia>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接