Bagaimana membuat deskripsi fungsi yang ditentukan pengguna ("docstrings") tersedia untuk julia REPL?

91

Bagaimana fungsi yang ditentukan pengguna (katakanlah f) memiliki hasil cetak yang berarti ketika diperiksa melalui REPL menggunakan ?fatauhelp(f)

Misalnya bayangkan saya menulis funciton berikut

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

Jika saya memuat ini ke dalam sesi julia dan mencoba, help(f)saya mendapatkan yang berikut:

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

Bagaimana jika sebaliknya saya ingin melihat sesuatu seperti

julia> help(f)
f

   Compute 2 times x minus y squared

di mana deskripsi "Hitung 2 kali x dikurangi y kuadrat" ditulis di suatu tempat. Saya menebak jawaban atas pertanyaan saya dapat ditentukan dari jawaban atas pertanyaan "Di manakah tempat deskripsi harus ditulis?"


Sebagai contoh, jika saya ingin melakukan hal yang sama dengan python, saya dapat mendefinisikan fungsinya dan meletakkan deskripsinya sebagai docstring:

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

yang akan membuat deskripsi saya segera tersedia saat saya mengetik help(f)atau f?dari IPython.

spencerlyon2
sumber
11
Saya rasa Anda belum bisa melakukannya. Lihat misalnya: github.com/JuliaLang/julia/issues/3988
ivarne
2
Ini akan segera terjadi. Lihat diskusi di sini
spencerlyon2

Jawaban:

56

Anda dapat menggunakan @docmakro di Julia versi 0.4 (Okt. 2015) dan yang lebih baru.

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

Sunting: Seperti yang ditunjukkan oleh @Harrison Grodin, versi 0.5 dan di atasnya mendukung sintaks yang disingkat serta Markdown, LaTEX, dan beberapa barang lainnya:

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

Ada detail lebih lanjut di dokumentasi .

Allen Luce
sumber
30

Di Julia v0.5 + ( termasuk Versi Julia yang lebih baru seperti 1.2+ ), Anda dapat menulis string multiline di atas definisi fungsi. (Tidak perlu @doclagi.)

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

Untuk informasi lebih lanjut tentang memformat dokumen Anda dengan benar, lihat Dokumentasi Julia resmi .

Harrison Grodin
sumber