Spec-Zone.ru › Julia 0.5

Взаимодействие с Julia

Julia поставляется с полным интерактивным командным интерпретатором REPL (read-eval-print loop), встроенным в исполняемый файл julia. Помимо быстрого и простого вычисления выражений Julia, он имеет поисковый журнал, автодополнение, множество полезных сочетаний клавиш и специальные режимы справки и оболочки. REPL можно запустить, просто вызвав julia без аргументов или дважды щелкнув по исполняемому файлу:

$ julia
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: http://docs.julialang.org
   _ _   _| |_  __ _   |  Type "help()" to list help topics
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.3.0-prerelease+2834 (2014-04-30 03:13 UTC)
 _/ |\__'_|_|_|\__'_|  |  Commit 64f437b (0 days old master)
|__/                   |  x86_64-apple-darwin13.1.0

julia>

Чтобы выйти из интерактивной сессии, введите ^D — клавишу управления вместе с клавишей d на пустой строке — или введите quit() и нажмите клавишу возврата или ввода. REPL приветствует вас баннером и julia> приглашением.

Различные режимы приглашения

Режим Julia

REPL имеет четыре основных режима работы. Первый и наиболее распространённый — режим Julian. Это режим по умолчанию; каждая новая строка изначально начинается с julia>. Здесь вы можете вводить выражения Julia. Нажатие клавиши возврата или ввода после ввода полного выражения вычислит его и отобразит результат последнего выражения.

julia> string(1 + 2)
"3"

Существует несколько полезных функций, характерных для интерактивной работы. Помимо отображения результата, REPL также связывает результат с переменной ans. Завершающая точка с запятой в строке может использоваться как флаг для подавления отображения результата.

julia> string(3 * 4);

julia> ans
"12"

Режим справки

Когда курсор находится в начале строки, режим приглашения можно изменить на режим справки, набрав ?. Julia попытается вывести справку или документацию для всего, что введено в режиме справки:

julia> ? # upon typing ?, the prompt changes (in place) to: help>

help> string
Base.string(xs...)

   Create a string from any values using the "print" function.

Помимо имён функций, можно ввести полные вызовы функций, чтобы увидеть вызываемый метод для заданного аргумента(ов). Также можно запросить макросы, типы и переменные:

help> string(1)
string(x::Union{Int16,Int128,Int8,Int32,Int64}) at string.jl:1553

help> @printf
Base.@printf([io::IOStream], "%Fmt", args...)

   Print arg(s) using C "printf()" style format specification
   string. Optionally, an IOStream may be passed as the first argument
   to redirect output.

help> AbstractString
DataType   : AbstractString
  supertype: Any
  subtypes : Any[DirectIndexString,RepString,RevString{T<:AbstractString},SubString{T<:AbstractString},String]

Режим справки можно покинуть, нажав клавишу Backspace в начале строки.

Режим оболочки

Так же, как режим справки полезен для быстрого доступа к документации, другой распространённой задачей является использование системной оболочки для выполнения системных команд. Так же, как ? входил в режим справки в начале строки, точка с запятой (;) войдёт в режим оболочки. И выйти из него можно, нажав Backspace в начале строки.

julia> ; # upon typing ;, the prompt changes (in place) to: shell>

shell> echo hello
hello

Режимы поиска

Во всех вышеперечисленных режимах выполненные строки сохраняются в файле истории, который можно искать. Для запуска инкрементального поиска по предыдущей истории введите ^R — клавишу управления вместе с клавишей r . Приглашение изменится на (reverse-i-search)`':, и по мере ввода поисковый запрос будет отображаться в кавычках. Последний результат, соответствующий запросу, будет динамически обновляться справа от двоеточия по мере ввода. Чтобы найти более ранний результат с тем же запросом, просто снова введите ^R.

Так же, как ^R — обратный поиск, ^S — прямой поиск, с приглашением (i-search)`':. Два этих режима могут использоваться совместно для перемещения по предыдущим или следующим соответствующим результатам соответственно.

Сочетания клавиш

Julia REPL активно использует сочетания клавиш. Некоторые сочетания клавиш с клавишей управления уже были описаны выше (^D для выхода, ^R и ^S для поиска), но их гораздо больше. Помимо клавиши управления, есть также сочетания клавиш с клавишей мета. Они зависят от платформы, но большинство терминалов по умолчанию используют alt- или option-клавиши в сочетании с другой клавишей для отправки клавиши мета (или могут быть настроены так).

Управление программой
^D Выход (если буфер пуст)
^C Прерывание или отмена
^L Очистка экрана консоли
Возврат/Ввод, ^J Новая строка, выполнение, если она завершена
meta-Возврат/Ввод Вставка новой строки без её выполнения
? или ; Вход в режим справки или оболочки (если в начале строки)
^R, ^S Инкрементальный поиск в истории, описанный выше
Перемещение курсора
Стрелка вправо, ^F Перемещение вправо на один символ
Стрелка влево, ^B Перемещение влево на один символ
Home, ^A Перемещение в начало строки
End, ^E Перемещение в конец строки
^P Переход к предыдущей или следующей записи истории
^N Переход к следующей записи истории
Стрелка вверх Переход вверх на одну строку (или к предыдущей записи истории)
Стрелка вниз Переход вниз на одну строку (или к следующей записи истории)
Page-up Переход к предыдущей записи истории, которая соответствует тексту перед курсором
Page-down Переход к следующей записи истории, которая соответствует тексту перед курсором
meta-F Переход вправо на одно слово
meta-B Переход влево на одно слово
Редактирование
Backspace, ^H Удаление предыдущего символа
Delete, ^D Удаление следующего символа (если в буфере есть текст)
meta-Backspace Удаление предыдущего слова
meta-D Удаление следующего слова
^W Удаление предыдущего текста до ближайшего пробела
^K «Уничтожение» до конца строки, размещение текста в буфере
^Y «Вставка» вставление текста из буфера уничтожения
^T Перестановка символов вокруг курсора

Настройка сочетаний клавиш

Сочетания клавиш REPL Julia могут быть полностью настроены под предпочтения пользователя путем передачи словаря функции REPL.setup_interface(). Ключами этого словаря могут быть символы или строки. Ключ '*' относится к стандартному действию. Сочетания клавиш «Управление» плюс символ x обозначаются как "^x". Сочетания «Мета» плюс x могут быть записаны как "\\Mx". Значения настраиваемой карты клавиш должны быть nothing (указывающее, что вход должен быть проигнорирован) или функциями, которые принимают сигнатуру (PromptState, AbstractREPL, Char). Функция REPL.setup_interface() должна быть вызвана перед инициализацией REPL, зарегистрировав операцию с помощью atreplinit(). Например, чтобы привязать клавиши со стрелками вверх и вниз к перемещению по истории без префиксного поиска, можно добавить следующий код в .juliarc.jl:

import Base: LineEdit, REPL

const mykeys = Dict{Any,Any}(
  # Up Arrow
  "\e[A" => (s,o...)->(LineEdit.edit_move_up(s) || LineEdit.history_prev(s, LineEdit.mode(s).hist)),
  # Down Arrow
  "\e[B" => (s,o...)->(LineEdit.edit_move_up(s) || LineEdit.history_next(s, LineEdit.mode(s).hist))
)

function customize_keys(repl)
  repl.interface = REPL.setup_interface(repl; extra_repl_keymap = mykeys)
end

atreplinit(customize_keys)

Пользователи должны обратиться к base/LineEdit.jl для выявления доступных действий при вводе с клавиатуры.

Автодополнение

В режимах Julian и справки REPL можно ввести первые несколько символов функции или типа, а затем нажать клавишу Tab, чтобы получить список всех совпадений:

julia> stri
stride     strides     string      stringmime  strip

julia> Stri
StridedArray    StridedVecOrMat  AbstractString
StridedMatrix   StridedVector

Клавиша Tab также может использоваться для подстановки математических символов LaTeX их эквивалентами Unicode и получения списка совпадений LaTeX:

julia> \pi[TAB]
julia> π
π = 3.1415926535897...

julia> e\_1[TAB] = [1,0]
julia> e₁ = [1,0]
2-element Array{Int64,1}:
 1
 0

julia> e\^1[TAB] = [1 0]
julia> e¹ = [1 0]
1×2 Array{Int64,2}:
 1  0

julia> \sqrt[TAB]2     # √ is equivalent to the sqrt() function
julia> √2
1.4142135623730951

julia> \hbar[TAB](h) = h / 2\pi[TAB]
julia> ħ(h) = h / 2π
ħ (generic function with 1 method)

julia> \h[TAB]
\hat              \heartsuit         \hksearow          \hookleftarrow     \hslash
\hbar             \hermitconjmatrix  \hkswarow          \hookrightarrow    \hspace

julia> α="\alpha[TAB]"   # LaTeX completion also works in strings
julia> α="α"

Полный список автодополнений можно найти в разделе «Ввод Unicode» руководства.

Автодополнение путей работает для строк и режима оболочки Julia:

julia> path="/[TAB]"
.dockerenv  .juliabox/   boot/        etc/         lib/         media/       opt/         root/        sbin/        sys/         usr/
.dockerinit bin/         dev/         home/        lib64/       mnt/         proc/        run/         srv/         tmp/         var/
shell> /[TAB]
.dockerenv  .juliabox/   boot/        etc/         lib/         media/       opt/         root/        sbin/        sys/         usr/
.dockerinit bin/         dev/         home/        lib64/       mnt/         proc/        run/         srv/         tmp/         var/

Автодополнение может помочь в исследовании доступных методов, соответствующих введённым аргументам:

julia> max([TAB] # All methods are displayed, not shown here due to size of the list

julia> max([1,2],[TAB] # All methods where `Vector{Int}` matches as first argument
max{T1<:Real,T2<:Real}(x::AbstractArray{T1,N<:Any}, y::T2) at operators.jl:544
max{Tx<:Real,Ty<:Real}(x::Union{Base.ReshapedArray{Tx,1,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray{Tx,1},SubArray{Tx,1,A<:Union{Base.ReshapedArray{T<:Any,N<:Any,A<:DenseArray,MI<:Tuple{Vararg{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},N<:Any}}},DenseArray},I<:Tuple{Vararg{Union{Base.AbstractCartesianIndex,Colon,Int64,Range{Int64}},N<:Any}},L<:Any}}, y::AbstractSparseArray{Ty,Ti<:Any,1}) at sparse\sparsevector.jl:1127
max{T1<:Real,T2<:Real}(x::AbstractArray{T1,N<:Any}, y::AbstractArray{T2,N<:Any}) at operators.jl:548
max(x, y) at operators.jl:78
max(a, b, c, xs...) at operators.jl:119

julia> max([1,2], max(1,2),[TAB] # All methods matching the arguments.
max{T1<:Real,T2<:Real}(x::AbstractArray{T1,N<:Any}, y::T2) at operators.jl:544
max(x, y) at operators.jl:78
max(a, b, c, xs...) at operators.jl:119

julia> split("1 1 1", # Keywords are also displayed in the suggested methods, see second line after `;` where `limit` and `keep` are keyword arguments
split(str::AbstractString) at strings/util.jl:151
split{T<:AbstractString}(str::T, splitter; limit, keep) at strings/util.jl:127

Автодополнение методов использует выведение типов и, следовательно, может определить, соответствуют ли аргументы, даже если аргументы являются результатом функций. Функция должна быть типобезопасной, чтобы автодополнение могло исключить несоответствующие методы.

Автодополнение также может помочь в завершении полей:

julia> Pkg.a
add       available

Поля результатов функций также могут быть завершены:

julia> split("","")[1].[TAB]
endof  offset  string

Автодополнение полей результатов функций использует выведение типов и может предлагать поля только в том случае, если функция является типобезопасной.

Настройка цветов

Цвета, используемые Julia и REPL, также можно настроить. Чтобы изменить цвет приглашения Julia, добавьте что-то вроде следующего в свой файл juliarc.jl:

function customize_colors(repl)
    repl.prompt_color = Base.text_colors[:cyan]
end

atreplinit(customize_colors)

Доступные цветовые ключи в Base.text_colors — :black, :red, :green, :yellow, :blue, :magenta, :cyan, :white, :normal, и :bold . Аналогично, вы можете изменить цвета приглашений справки и оболочки, а также текста ввода и ответа, задав соответствующее поле в функции repl в файле customize_colors (соответственно help_color, shell_color, input_color, и answer_color). Для последних двух убедитесь, что поле envcolors также установлено в значение false.

Вы также можете настроить цвет отображения предупреждений и информационных сообщений, установив соответствующую переменную окружения. Например, чтобы отображать предупреждения жёлтым цветом, а информационные сообщения — синим, добавьте следующее в свой файл juliarc.jl:

ENV["JULIA_WARN_COLOR"] = :yellow
ENV["JULIA_INFO_COLOR"] = :cyan

© 2009–2016 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/release-0.5/manual/interacting-with-julia/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API