Как напечатать в REPL код функций в Julia?

В Julia многие функции Base и более близкие функции также написаны на чистом Julia, и код легко доступен. Можно просмотреть хранилище или локальные загруженные файлы и посмотреть, как эта функция написана / реализована. Но я думаю, что уже есть какой-то встроенный метод, который сделает это за вас, так что вы можете написать в REPL или Jupyter Notebook что-то вроде:

@code functioninquestion()

и получить что-то вроде:

functioninquestion(input::Type) some calculations return end без пейджинга через код. Я просто не помню метод или вызов. Я прочитал раздел «Отражение / Самоанализ» в Руководстве, но я не могу что-то там использовать. я пробовалmethods, methodswith, code_lowered, expand и не может заставить их дать то, что я хочу-

 wpkzz09 июн. 2016 г., 19:48
Очень приятно, что люди из Julia Development прямо отвечают на вопросы.

Ответы на вопрос(3)

Решение Вопроса

Хотя это может быть не то, что ищет ОП,@less очень удобно читать базовый код (поэтому я очень часто его использую). Например,

julia> @less 1 + 2

дает

+(x::Int, y::Int) = box(Int,add_int(unbox(Int,x),unbox(Int,y)))

что соответствует линии, заданной

julia> @which 1 + 2
+(x::Int64, y::Int64) at int.jl:8
 Erik Engheim15 нояб. 2017 г., 09:15
@wpkzz@less shuffle!() естественно, не работает, потому что вы затем просите взглянуть на метод, который отвечает на вызов функции shuffle без аргументов. Этого не существует, поэтому вы ничего не получите. Вы должны дать этому фактический аргумент, как@less shuffle!([1, 2]), Помните, что в Julia каждая функция имеет несколько методов реализации в зависимости от переданных аргументов. Джулия должна знать ваш аргумент, чтобы выбрать метод, чтобы показать вам.
 wpkzz09 июн. 2016 г., 19:44
Ну я попробовал@less shuffle!() но это не работает .... но если я дамshuffle! аргумент, тогда он работает, так что он работает ... хотя он идет на несколько строк ниже кода. Спасибо!

но, вероятно, будет в будущем.

 Matt B.06 июн. 2016 г., 19:59
Это технически правильно.@edit а также@less полагаться на информацию о трассировке в функции и просто указать файл, в котором они были определены. Конечно, это не работает, если функция была определена в записной книжке Jupyter или в REPL. Или он может отображать устаревший код, который был изменен с тех пор, как его загрузила Джулия. Не уверен, почему понизить здесь.
 Scott Jones07 июн. 2016 г., 00:07
ОП спрашивал о просмотре кода в Base, и Стефан не ответил на это. Подняв вопрос о коде, определенном в записной книжке Jupyter или REPL, или он может устареть,является полезное дополнение к другим ответам, даже если оно не относится к ФП.

@edit functioninquestion() откроет ваш редактор в месте, где указан метод. Вероятно, было бы не сложно взять ту же информацию, что и@edit и используйте его, чтобы открыть файл и перейти к определению метода, а затем отобразить его непосредственно в REPL (или Jupyter). РЕДАКТИРОВАТЬ: Пока я отвечал, кто-то еще упомянул@lessкоторый, кажется, делает именно то, что вы хотите уже.

Ваш ответ на вопрос