Spec-Zone.ru › Julia 0.6

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

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

$ julia
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: https://docs.julialang.org
   _ _   _| |_  __ _   |  Type "?help" for help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.6.0-dev.2493 (2017-01-31 18:53 UTC)
 _/ |\__'_|_|_|\__'_|  |  Commit c99e12c* (0 days old master)
|__/                   |  x86_64-linux-gnu

julia>

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

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

Режим Julia

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

julia> string(1 + 2)
"3"

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

julia> string(3 * 4);

julia> ans
"12"

В режиме Julia REPL поддерживает так называемое вставку приглашения. Это активируется при вставке текста, начинающегося с julia>  в REPL. В этом случае анализируются только выражения, начинающиеся с julia> , а другие удаляются. Это позволяет вставлять фрагмент кода, скопированный из сессии REPL, не удаляя приглашения и выводы. Эта функция включена по умолчанию, но может быть отключена или включена по желанию с помощью Base.REPL.enable_promptpaste(::Bool). Если она включена, вы можете попробовать её, вставив в REPL код, приведённый выше.

Режим помощи

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

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

help?> string
search: string String stringmime Cstring Cwstring RevString readstring randstring bytestring SubString

  string(xs...)

  Create a string from any values using the print function.

Также можно запросить макросы, типы и переменные:

help?> @time
  @time

  A macro to execute an expression, printing the time it took to execute, the number of allocations,
  and the total number of bytes its execution caused to be allocated, before returning the value of the
  expression.

  See also @timev, @timed, @elapsed, and @allocated.

help?> AbstractString
search: AbstractString AbstractSparseMatrix AbstractSparseVector AbstractSet

  No documentation found.

  Summary:

  abstract AbstractString <: Any

  Subtypes:

  Base.Test.GenericString
  DirectIndexString
  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 Переставить символы вокруг курсора
^Q Введите число в REPL и нажмите ^Q для открытия редактора в соответствующем стековом кадре

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

Сочетания клавиш REPL Julia можно полностью настроить по предпочтениям пользователя, передав словарь в REPL.setup_interface(). Ключи этого словаря могут быть символами или строками. Ключ '*' относится к действию по умолчанию. Сочетания клавиш Control плюс символ x указываются с помощью "^x". Meta плюс 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 для выявления доступных действий при вводе клавиш.

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

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

julia> stri[TAB]
stride     strides     string      stringmime  strip

julia> Stri[TAB]
StridedArray    StridedMatrix    StridedVecOrMat  StridedVector    String

Клавишу 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              \hermitconjmatrix  \hkswarow          \hrectangle
\hatapprox        \hexagon           \hookleftarrow     \hrectangleblack
\hbar             \hexagonblack      \hookrightarrow    \hslash
\heartsuit        \hksearow          \house             \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(x, y) in Base at operators.jl:215
max(a, b, c, xs...) in Base at operators.jl:281

julia> max([1, 2], max(1, 2), [TAB] # All methods matching the arguments.
max(x, y) in Base at operators.jl:215
max(a, b, c, xs...) in Base at operators.jl:281

Ключевые слова также отображаются в предлагаемых методах, см. вторую строку после ;, где limit и keep являются ключевыми аргументами:

julia> split("1 1 1", [TAB]
split(str::AbstractString) in Base at strings/util.jl:278
split{T<:AbstractString}(str::T, splitter; limit, keep) in Base at strings/util.jl:254

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

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

julia> Pkg.a[TAB]
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 в режиме помощи REPL. Кроме того, целые числа от 0 до 255 могут использоваться как цветовые ключи для терминалов с поддержкой 256 цветов.

Также можно изменить цвета для приглашений помощи и оболочки, а также для текста ввода и ответа, установив соответствующее поле repl в функции customize_colors выше (соответственно, help_color, shell_color, input_color, и answer_color). Для последних двух убедитесь, что поле envcolors также установлено в false.

Также возможно применение полужирного шрифта, используя Base.text_colors[:bold] как цвет. Например, чтобы отображать ответы полужирным шрифтом, можно использовать следующее как .juliarc.jl:

function customize_colors(repl)
    repl.envcolors = false
    repl.answer_color = Base.text_colors[:bold]
end

atreplinit(customize_colors)

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

ENV["JULIA_ERROR_COLOR"] = :magenta
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.6/manual/interacting-with-julia/

Spec-Zone.ru

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