Comment rendre les descriptions de fonctions définies par l'utilisateur («docstrings») disponibles pour Julia REPL?

91

Comment les fonctions définies par l'utilisateur (par exemple f) peuvent-elles avoir des impressions significatives lorsqu'elles sont inspectées via le REPL en utilisant ?fouhelp(f)

Par exemple, imaginez que j'écris la fonction suivante

function f(x::Float64, y::Float64)
    return 2x - y^2
end

Si je charge ceci dans une session julia et que j'essaye, help(f)j'obtiens ce qui suit:

julia> help(f)
f (generic function with 1 method)

Et si à la place je voulais voir quelque chose comme

julia> help(f)
f

   Compute 2 times x minus y squared

où la description "Calculer 2 fois x moins y au carré" est écrite quelque part. J'imagine que la réponse à ma question peut être déterminée à partir de la réponse à la question "Où est le quelque part où la description doit être écrite?"


A titre d'exemple, si je voulais faire la même chose en python, je pourrais définir la fonction et mettre la description en docstring:

def f(x, y):
    """
    Compute 2 times x minus y squared
    """
    return 2 *  x - y ** 2

ce qui rendrait ma description immédiatement disponible lorsque je tape help(f)ou f?depuis IPython.

spencerlyon2
la source
11
Je ne pense pas que vous puissiez encore faire ça. Voir par exemple: github.com/JuliaLang/julia/issues/3988
ivarne
2
Cela se produira bientôt. Voir la discussion ici
spencerlyon2

Réponses:

56

Vous pouvez utiliser la @docmacro dans les versions 0.4 de Julia (octobre 2015) et supérieures.

% julia
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: http://docs.julialang.org
   _ _   _| |_  __ _   |  Type "?help" for help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.4.0 (2015-10-08 06:20 UTC)
 _/ |\__'_|_|_|\__'_|  |  Official http://julialang.org/ release
|__/                   |  x86_64-apple-darwin13.4.0

julia> @doc """
       Compute 2 times x minus y squared.
       """ ->
       function f(x::Float64, y::Float64)
           return 2x - y^2
       end
f (generic function with 1 method)

julia> @doc f
  Compute 2 times x minus y squared.

Edit: Comme indiqué par @Harrison Grodin, les versions 0.5 et supérieures prennent en charge une syntaxe abrégée ainsi que Markdown, LaTEX et quelques autres goodies:

"""
Calculate the left Riemann sum[^1] approximating ``\int_a^b f(x) dx = F(b) - F(a).``

[^1]: Thomas G., Finney R. (1996), Calculus and Analytic Geometry, Addison Wesley, ISBN 0-201-53174-7
"""
function rs(a, b, d, f)
end

Il y a plus de détails dans la documentation .

Allen Luce
la source
30

Dans Julia v0.5 + ( y compris les versions plus récentes de Julia comme 1.2+ ), vous pouvez écrire une chaîne multiligne au-dessus de la définition de la fonction. (Pas besoin de @docplus.)

julia> """
           cube(x)

       Compute the cube of `x`, ``x^3``.

       # Examples
       ```jldoctest
       julia> cube(2)
       8
       ```
       """
       function cube(x)
           x^3
       end
cube

help?> cube
search: Cdouble isexecutable Ac_mul_B Ac_mul_Bc Ac_mul_B! Ac_mul_Bc! cumsum_kbn

  cube(x)

  Compute the cube of x, x^3.

     Examples
    ≡≡≡≡≡≡≡≡≡≡

  julia> cube(2)
  8

Pour plus d'informations sur le formatage correct de vos docstrings, consultez la documentation officielle de Julia .

Harrison Grodin
la source