Jak udostępnić Julii REPL opisy funkcji zdefiniowanych przez użytkownika („ciągi dokumentów”)?

91

W jaki sposób funkcje zdefiniowane przez użytkownika (powiedzmy f) mogą mieć znaczące wydruki podczas kontroli za pomocą REPL za pomocą ?flubhelp(f)

Na przykład wyobraź sobie, że piszę następującą funkcję

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

Jeśli załaduję to do sesji julii i spróbuję help(f), otrzymam:

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

A co jeśli zamiast tego chciałbym zobaczyć coś takiego

julia> help(f)
f

   Compute 2 times x minus y squared

gdzie opis „Oblicz 2 razy x minus y do kwadratu” jest gdzieś zapisany. Domyślam się, że odpowiedź na moje pytanie można określić na podstawie odpowiedzi na pytanie „Gdzie jest miejsce, w którym należy napisać opis?”


Przykładowo, gdybym chciał zrobić to samo w Pythonie, mógłbym zdefiniować funkcję i umieścić opis jako ciąg dokumentów:

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

co sprawiłoby, że mój opis byłby natychmiast dostępny podczas pisania help(f)lub f?z IPythona.

spencerlyon2
źródło
11
Myślę, że jeszcze nie możesz tego zrobić. Zobacz na przykład: github.com/JuliaLang/julia/issues/3988
ivarne
2
To się wkrótce wydarzy. Zobacz dyskusję tutaj
spencerlyon2

Odpowiedzi:

56

@docMakra można używać w Julii w wersji 0.4 (październik 2015) i nowszych.

% 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.

Edycja: jak wskazał @Harrison Grodin, wersje 0.5 i nowsze obsługują skróconą składnię, a także Markdown, LaTEX i kilka innych dodatków:

"""
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

Więcej szczegółów w dokumentacji .

Allen Luce
źródło
30

W wersji Julia w wersji 0.5+ (w tym w nowszych wersjach Julii, takich jak 1.2+ ), możesz napisać ciąg wielowierszowy powyżej definicji funkcji. (Nie ma @docjuż takiej potrzeby ).

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

Więcej informacji na temat prawidłowego formatowania dokumentów można znaleźć w oficjalnej dokumentacji Julii .

Harrison Grodin
źródło