AnyMath 文档

茱莉亚REPL

Julia内置了一个功能齐全的交互式命令行REPL(read-eval-print循环)。 朱莉娅 可执行文件。 除了允许快速轻松地评估Julia语句之外,它还具有可搜索的历史记录,制表符完成,许多有用的键绑定以及专用的帮助和shell模式。 REPL可以通过简单的调用来启动 朱莉娅 没有参数或双击可执行文件:

@ast MarkdownAST。文件()do 马克顿斯特。CodeBlock("","julia julia\n\n_\n()/文档:https://docs.julialang.org\n () | () () |\n_ _ | | _ | 型"?"寻求帮助,"]?"对于Pkg的帮助。\n|||||||// ` |/\n| | || | | | (| | | 版本1.12.5(2026-02-09)\n/ |*'|||*'| | 官员https://julialang.org 释放\n/__//\n\n\njulia>") 结束

要退出交互式会话,请键入 ^D --控制键连同 d 空白行上的键—​或键入 出口() 后面是return或enter键。 REPL用横幅和一个 朱莉娅> 提示。

不同的提示模式

朱利安模式

REPL有五种主要的操作模式。 第一个也是最常见的是朱利安提示。 它是默认的操作模式;每个新行最初以 朱莉娅>. 在这里,您可以输入Julia表达式。 在输入完整表达式后点击return或enter将计算该条目并显示最后一个表达式的结果。

julia> string(1 + 2)
"3"

交互式工作有许多独特的有用功能. 除了显示结果之外,REPL还将结果绑定到变量 ans. 行上的尾随分号可以用作禁止显示结果的标志。

julia> string(3 * 4);

julia> ans
"12"

在Julia模式下,REPL支持名为_prompt pasting_的东西。 这将在粘贴以以下开头的文本时激活 朱莉娅> 进入REPL。 在这种情况下,只有以 朱莉娅> (以及其他REPL模式提示: 贝壳>, 救命?>, pkg> )被解析,但其他人被删除。 这样就可以粘贴从REPL会话复制的文本块,而无需擦除提示和输出。 此功能默认启用,但可以禁用或随意启用 REPL。enable_promptpaste(::Bool). 如果它已启用,您可以通过将此段上方的代码块直接粘贴到REPL中来试用它。 此功能不适用于标准Windows命令提示符,因为它在检测粘贴发生时的限制。

一个非-什么都没有执行表达式的结果由REPL使用 展览具有特定功能 IOContext(通过 展览及展览,其中默认调用 show(io,MIME("text/plain"),ans),这反过来又默认为 显示(io,ans)). 特别是, :限制 属性设置为 真的. 其他属性可以在某些接收 展览 方法一个默认值,如果它尚未设置,如 :紧凑型. 作为一个实验性的特性,可以通过 基地。active_repl。选择。iocontext 字典(将值关联到属性)。 例如:

julia> rand(2, 2)
2×2 Matrix{Float64}:
 0.8833    0.329197
 0.719708  0.59114

julia> show(IOContext(stdout, :compact => false), "text/plain", rand(2, 2))
 0.43540323669187075  0.15759787870609387
 0.2540832269192739   0.4597637838786053
julia> Base.active_repl.options.iocontext[:compact] = false;

julia> rand(2, 2)
2×2 Matrix{Float64}:
 0.2083967319174056  0.13330606013126012
 0.6244375177790158  0.9777957560761545

为了在启动时自动定义此字典的值,可以使用 [医阿特普利尼特]功能在 ~/.朱莉娅/配置/启动。jl 文件,例如:

atreplinit() do repl
    repl.options.iocontext[:compact] = false
end

帮助模式

当光标位于行首时,可以通过键入将提示更改为帮助模式 ?. Julia将尝试为在帮助模式下输入的任何内容打印帮助或文档:

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

help?> string
search: string String Cstring Cwstring RevString 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?> Int32
search: Int32 UInt32

  Int32 <: Signed

  32-bit signed integer type.

字符串或正则表达式文本使用以下方法搜索所有文档字符串 [医apropos]:

help?> "aprop"
REPL.stripmd
Base.Docs.apropos

help?> r"ap..p"
Base.:∘
Base.shell_escape_posixly
Distributed.CachingPool
REPL.stripmd
Base.Docs.apropos

帮助模式的另一个特点是能够访问扩展的文档串。 你可以通过输入类似的东西来做到这一点 ??印刷业 而不是 ?印刷业 这将显示 #扩展帮助 源代码文档中的一节.

帮助模式可以通过按退格在行的开头退出。

Shell模式

正如帮助模式对于快速访问文档很有用一样,另一个常见的任务是使用系统shell来执行系统命令。 正如 ? 进入帮助模式时,在行的开头,一个分号(;)将进入shell模式。 它可以通过按退格在行的开头退出。

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

shell> echo hello
hello

注意对于Windows用户,Julia的shell模式不会公开windows shell命令。 因此,这将失败:

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

shell> dir
ERROR: IOError: could not spawn `dir`: no such file or directory (ENOENT)
Stacktrace!
.......

但是,您可以访问 PowerShell的 像这样:

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

shell> powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Users\elm>
  1. 而到 cmd。exe文件 像那样(见 署长 命令):

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

shell> cmd
Microsoft Windows [version 10.0.17763.973]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Users\elm>dir
 Volume in drive C has no label
 Volume Serial Number is 1643-0CD7
  Directory of C:\Users\elm

29/01/2020  22:15    <DIR>          .
29/01/2020  22:15    <DIR>          ..
02/02/2020  08:06    <DIR>          .atom

Pkg模式

包管理器模式接受用于加载和更新包的专用命令。 它是通过按下输入 ] 在Julian REPL提示符下键,并通过按CTRL-C或按行开头的退格键退出。 此模式的提示是 pkg>. 它支持自己的帮助模式,这是通过按下输入 ?pkg> 提示。 包管理器模式记录在Pkg手册中,可在https://julialang.github.io/Pkg.jl/v1/。

搜索模式

在上述所有模式中,执行的行都保存到历史文件中,可以搜索历史文件。 要通过以前的历史记录启动增量搜索,请键入 ^R --控制键连同 r 钥匙。 提示将更改为 (反向i-搜寻)':,当您键入搜索查询将出现在引号中。 随着键入更多内容,与查询匹配的最新结果将动态更新到冒号右侧。 要使用相同的查询查找较旧的结果,只需键入 ^R` 又来了。

正如 ^R 是反向搜索, ^S 是前向搜索,提示 (i-搜寻)':`. 两者可以相互结合使用,以分别移动通过前一个或下一个匹配结果。

Julia REPL中所有执行的命令都被登录到 ~/.julia/logs/repl_history。jl 以及执行时的时间戳和当前的REPL模式。 搜索模式查询此日志文件以查找您以前运行的命令。 这可以在启动时通过传递禁用 --历史-档案=否 国旗给茱莉亚。

键绑定

Julia REPL充分利用了键绑定。 上面已经介绍了几个控制键绑定(^D 退出, ^R^S 搜索),但还有更多。 除了control-key之外,还有meta-key绑定。 这些因平台而异,但大多数终端默认使用alt-或option-按住键发送元键(或可以配置为这样做),或按Esc然后按键。

键绑定 资料描述

*程序控制*

^D

退出(缓冲区为空时)

^C

中断或取消

^L

清除控制台屏幕

返回/进入, ^J

新行,如果完成则执行

元返回/输入

插入新行而不执行它

?;

输入帮助或shell模式(在行开头时)

^R, ^S

增量历史搜索,如上所述

*光标移动*

右箭头, ^F

向右移动一个字符

左箭头, ^B

向左移动一个字符

ctrl-右键, 元F

右移一个字

ctrl-左, 元B

左移一个字

家, ^A

移动到行首

结束, ^E

移动到行尾

向上箭头, ^P

向上移动一行(或更改为与光标之前的文本匹配的上一个历史记录条目)

向下箭头, ^N

向下移动一行(或更改到与光标前文本匹配的下一个历史记录条目)

Shift-箭头键

根据箭头键的方向移动光标,同时激活区域("shift选择")

向上翻页, 元P

更改到以前的历史记录条目

翻页/翻页, 元N

更改到下一个历史记录条目

元<

更改为第一个历史记录条目(如果当前会话在历史中的当前位置之前)

元->

更改为最后一个历史记录条目

^-空格

在编辑区域中设置"标记"(如果区域处于活动状态,则取消激活该区域)

^-空间^-空间

在编辑区域中设置"标记"并使区域"活动",即突出显示

^G

取消激活区域(即使其不突出显示)

^X^X

用标记交换当前位置

*编辑*

退格键, ^H

删除前一个字符,或整个区域,当它处于活动状态

删除, ^D

正向删除一个字符(当缓冲区有文本时)

元退格键

删除前面的单词

元d

转发删除下一个单词

^W

删除以前的文本到最接近的空格

元w

复制杀死环中的当前区域

元W

"杀死"当前区域,将文本放在杀死环中

^U

"Kill"到行首,将文本放在kill环中

^K

"Kill"到行尾,将文本放在kill环中

^Y

"Yank"插入kill ring中的文本

元y

用杀死环中的旧条目替换以前猛拉的文本

^T

转置有关光标的字符

元向上箭头

用上面的线转置当前线

元向下箭头

用下面的行转置当前行

元u

将下一个单词更改为大写

元c

将下一个单词更改为titlecase

元l

将下一个单词更改为小写

^/, ^_

撤消以前的编辑操作

^Q

在REPL中写一个数字,然后按 ^Q 在相应的stackframe或方法上打开编辑器

元左箭头

缩进左边的当前行

元右箭头

缩进右边的当前行

元-。

从以前的历史记录条目中插入最后一个单词

元e

在编辑器中编辑当前输入

自定义键绑定

Julia的REPL keybindings可以通过将字典传递到 REPL。setup_接口. 该字典的键可以是字符或字符串。 钥匙 '*' 指默认操作。 控制加字符 x 绑定用 "^x". 元加 x 可以写 "\\M-x""\前",和控制加 x 可以写 "\\C-x""^x". 自定义键盘映射的值必须为 什么都没有 (表示应忽略输入)或接受签名的函数 (PromptState,AbstractREPL,Char). 该 REPL。setup_接口 函数必须在REPL初始化之前调用,方法是将操作注册到 [医阿特普利尼特] . 例如,要绑定向上和向下箭头键以在没有前缀搜索的情况下浏览历史记录,可以将以下代码放入 ~/.朱莉娅/配置/启动。jl:

import REPL
import REPL.LineEdit

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_down(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)

用户应参考 LineEdit。jl 来发现按键输入上的可用动作。

标签完成

在REPL的Julian,pkg和help模式中,可以输入函数或类型的前几个字符,然后按tab键以获得所有匹配项的列表:

julia> x[TAB]
julia> xor

在某些情况下,它只完成名称的一部分,直到下一个歧义:

julia> mapf[TAB]
julia> mapfold

如果您再次点击tab,那么您将获得可能完成此操作的列表:

julia> mapfold[TAB]
mapfoldl mapfoldr

当输入行末尾有一个完整的制表符完整结果,并且输入了2个或更多字符时,完成的提示将以较浅的颜色显示。 这可以通过以下方式禁用 基地。active_repl。选择。hint_tab_completes=false 或通过添加

atreplinit() do repl
    if VERSION >= v"1.11.0-0"
        repl.options.hint_tab_completes = false
    end
end

致你的 ~/.朱莉娅/配置/启动。jl.

兼容性

Julia1.11Tab-在Julia1.11中添加了完整的提示

与REPL的其他组件一样,搜索区分大小写:

julia> stri[TAB]
stride     strides     string      strip

朱莉娅>条纹[标签]
StridedArray StridedMatrix StridedVecOrMat StridedVector字符串

Tab键还可用于用它们的Unicode等价物替换LaTeX数学符号,并获得LaTeX匹配的列表:

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

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

julia> e\^1[TAB] = [1 0]
julia> e¹ = [1 0]
1×2 Matrix{Int64}:
 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的shell模式:

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> foo = Dict("qwer1"=>1, "qwer2"=>2, "asdf"=>3)
Dict{String,Int64} with 3 entries:
  "qwer2" => 2
  "asdf"  => 3
  "qwer1" => 1

julia> foo["q[TAB]

"qwer1" "qwer2"
julia> foo["qwer

选项卡完成也可以帮助完成字段:

julia> x = 3 + 4im;

julia> x.[TAB][TAB]
im re

julia> import UUIDs

julia> UUIDs.uuid[TAB][TAB]
uuid1        uuid4         uuid5        uuid_version

从函数输出的字段也可以完成:

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

从函数输出的字段的完成使用类型推断,并且只有当函数类型稳定时,它才能建议字段。

制表符完成可以帮助调查与输入参数匹配的可用方法:

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

关键字也显示在建议的方法中。 ;,见下文 限额守时,守时 是关键字参数:

julia> split("1 1 1", [TAB]
split(str::AbstractString; limit, keepempty) in Base at strings/util.jl:302
split(str::T, splitter; limit, keepempty) where T<:AbstractString in Base at strings/util.jl:277

方法的完成使用类型推断,因此可以查看参数是否匹配,即使参数是从函数输出的。 该函数需要是类型稳定的完成,以便能够删除非匹配方法。

如果您想知道哪些方法可以与特定的参数类型一起使用,请使用 ? 作为函数名。 这显示了在InteractiveUtils中查找接受单个字符串的函数的示例:

julia> InteractiveUtils.?("somefile")[TAB]
edit(path::AbstractString) in InteractiveUtils at InteractiveUtils/src/editless.jl:197
less(file::AbstractString) in InteractiveUtils at InteractiveUtils/src/editless.jl:266

这列出的方法在 交互式活动 可以在字符串上调用的模块。 默认情况下,这将排除所有参数类型为 任何,但你也可以通过按住SHIFT-TAB而不是TAB来看到这些:

julia> InteractiveUtils.?("somefile")[SHIFT-TAB]
apropos(string) in REPL at REPL/src/docview.jl:796
clipboard(x) in InteractiveUtils at InteractiveUtils/src/clipboard.jl:64
code_llvm(f) in InteractiveUtils at InteractiveUtils/src/codeview.jl:221
code_native(f) in InteractiveUtils at InteractiveUtils/src/codeview.jl:243
edit(path::AbstractString) in InteractiveUtils at InteractiveUtils/src/editless.jl:197
edit(f) in InteractiveUtils at InteractiveUtils/src/editless.jl:225
eval(x) in InteractiveUtils at InteractiveUtils/src/InteractiveUtils.jl:3
include(x) in InteractiveUtils at InteractiveUtils/src/InteractiveUtils.jl:3
less(file::AbstractString) in InteractiveUtils at InteractiveUtils/src/editless.jl:266
less(f) in InteractiveUtils at InteractiveUtils/src/editless.jl:274
report_bug(kind) in InteractiveUtils at InteractiveUtils/src/InteractiveUtils.jl:391
separate_kwargs(args...; kwargs...) in InteractiveUtils at InteractiveUtils/src/macros.jl:7

您也可以使用 ?("一些文件")[标签] 并查看所有模块,但方法列表可能很长。

通过省略右括号,可以包含可能需要其他参数的函数:

julia> using Mmap

help?> Mmap.?("file",[TAB]
Mmap.Anonymous(name::String, readonly::Bool, create::Bool) in Mmap at Mmap/src/Mmap.jl:16
mmap(file::AbstractString) in Mmap at Mmap/src/Mmap.jl:245
mmap(file::AbstractString, ::Type{T}) where T<:Array in Mmap at Mmap/src/Mmap.jl:245
mmap(file::AbstractString, ::Type{T}, dims::Tuple{Vararg{Integer, N}}) where {T<:Array, N} in Mmap at Mmap/src/Mmap.jl:245
mmap(file::AbstractString, ::Type{T}, dims::Tuple{Vararg{Integer, N}}, offset::Integer; grow, shared) where {T<:Array, N} in Mmap at Mmap/src/Mmap.jl:245
mmap(file::AbstractString, ::Type{T}, len::Integer) where T<:Array in Mmap at Mmap/src/Mmap.jl:251
mmap(file::AbstractString, ::Type{T}, len::Integer, offset::Integer; grow, shared) where T<:Array in Mmap at Mmap/src/Mmap.jl:251
mmap(file::AbstractString, ::Type{T}, dims::Tuple{Vararg{Integer, N}}) where {T<:BitArray, N} in Mmap at Mmap/src/Mmap.jl:316
mmap(file::AbstractString, ::Type{T}, dims::Tuple{Vararg{Integer, N}}, offset::Integer; grow, shared) where {T<:BitArray, N} in Mmap at Mmap/src/Mmap.jl:316
mmap(file::AbstractString, ::Type{T}, len::Integer) where T<:BitArray in Mmap at Mmap/src/Mmap.jl:322
mmap(file::AbstractString, ::Type{T}, len::Integer, offset::Integer; grow, shared) where T<:BitArray in Mmap at Mmap/src/Mmap.jl:322

自定义颜色

Julia和REPL使用的颜色也可以定制。 要更改Julia提示的颜色,您可以在您的 ~/.朱莉娅/配置/启动。jl 文件,该文件将放在您的主目录中:

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

atreplinit(customize_colors)

可用的颜色键可以通过键入来查看 基地。文本颜色 在REPL的帮助模式。 此外,整数0到255可以用作具有256颜色支持的终端的颜色键。

您还可以通过设置相应的字段来更改帮助和shell提示以及输入和回答文本的颜色 代表,代表自定义颜色 函数以上(分别, 帮助颜色, 贝壳颜色, 输入颜色,而 答案_颜色). 对于后两者,请确保 环境颜色 字段也设置为false。

也可以使用以下方法应用粗体格式 基地。text_colors[:粗体] 作为一种颜色。 例如,要以粗体字体打印答案,可以使用以下内容作为 ~/.朱莉娅/配置/启动。jl:

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

atreplinit(customize_colors)

您还可以通过设置适当的环境变量来自定义用于呈现警告和信息性消息的颜色。 例如,要分别以洋红色、黄色和青色呈现错误、警告和信息性消息,您可以将以下内容添加到您的 ~/.朱莉娅/配置/启动。jl 档案:

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

更改在REPL处于活动状态的上下文模块

在REPL输入表达式时,默认情况下,它们在 主要 模块;

julia> @__MODULE__
Main

可以通过函数更改此上下文模块 REPL。激活(m) 哪里 m 是一个 模块 或者通过在REPL中键入模块并按键绑定Alt-m与模块名称上的光标(MacOS上的Esc-m)。 在空提示符上按下键绑定将切换先前活动的非之间的上下文-主要 模块和 主要. 活动模块显示在提示中(除非是 主要):

julia> using REPL

julia> REPL.activate(Base)

(Base) julia> @__MODULE__
Base

(Base) julia> using REPL # Need to load REPL into Base module to use it

(Base) julia> REPL.activate(Main)

julia>

julia> Core<Alt-m> # using the keybinding to change module

(Core) julia>

(Core) julia> <Alt-m> # going back to Main via keybinding

julia>

julia><Alt-m>#通过键绑定返回以前活动的核心

(核心)朱莉娅>

采用可选模块参数的函数通常默认为REPL上下文模块。 作为一个例子,调用 varinfo() 将显示当前活动模块的变量:

julia> module CustomMod
           export var, f
           var = 1
           f(x) = x^2
       end;

julia> REPL.activate(CustomMod)

(Main.CustomMod) julia> varinfo()
  name         size summary
  ––––––––– ––––––– ––––––––––––––––––––––––––––––––––
  CustomMod         Module
  f         0 bytes f (generic function with 1 method)
  var       8 bytes Int64

编号提示

可以得到一个类似于IPython REPL和Mathematica笔记本的接口,带有编号的输入提示和输出前缀。 这是通过调用 REPL.numbered_prompt!(). 如果您想在启动时启用此功能,请添加

atreplinit() do repl
    @eval import REPL
    if !isdefined(repl, :interface)
        repl.interface = REPL.setup_interface(repl)
    end
    REPL.numbered_prompt!(repl)
end

致你的 启动。jl 档案。 在编号提示变量 出[n] (哪里 n 是整数)可用于引用较早的结果:

In [1]: 5 + 3
Out[1]: 8

In [2]: Out[1] + 5
Out[2]: 13

In [3]: Out
Out[3]: Dict{Int64, Any} with 2 entries:
  2 => 13
  1 => 8

注意,因为从以前的REPL评估的所有输出都保存在 变量,如果它们返回许多大型内存对象(如数组),则应该小心,因为只要对它们的引用仍然存在,它们就会受到垃圾回收的保护 . 如果您需要删除对 ,您可以清除它存储的整个历史记录 空!(出),或以 Out[n]=无.

[医]终末

TerminalMenus是Julia REPL的一个子模块,可以在终端中实现小型,低调的交互式菜单。

例子:

import REPL
using REPL.TerminalMenus

options = ["apple", "orange", "grape", "strawberry",
            "blueberry", "peach", "lemon", "lime"]

RadioMenu

RadioMenu允许用户从列表中选择一个选项。 该 请求 函数显示交互式菜单并返回所选选项的索引。 如果用户按’q’或 ctrl-c, 请求 将返回一个 -1.

# `pagesize` is the number of items to be displayed at a time.
#  The UI will scroll if the number of options is greater
#   than the `pagesize`
menu = RadioMenu(options, pagesize=4)

# `request` displays the menu and returns the index after the
#   user has selected a choice
choice = request("Choose your favorite fruit:", menu)

if choice != -1
    println("Your favorite fruit is ", options[choice], "!")
else
    println("Menu canceled.")
end

输出:

Choose your favorite fruit:
^  grape
   strawberry
 > blueberry
v  peach
Your favorite fruit is blueberry!

多选门

MultiSelectMenu允许用户从列表中选择许多选项。

# here we use the default `pagesize` 10
menu = MultiSelectMenu(options)

# `request` returns a `Set` of selected indices
# if the menu us canceled (ctrl-c or q), return an empty set
choices = request("Select the fruits you like:", menu)

if length(choices) > 0
    println("You like the following fruits:")
    for i in choices
        println("  - ", options[i])
    end
else
    println("Menu canceled.")
end

输出:

Select the fruits you like:
[press: Enter=toggle, a=all, n=none, d=done, q=abort]
   [ ] apple
 > [X] orange
   [X] grape
   [ ] strawberry
   [ ] blueberry
   [X] peach
   [ ] lemon
   [ ] lime
You like the following fruits:
  - orange
  - grape
  - peach

定制/配置

ConfiguredMenu子类型

从Julia1.6开始,推荐的配置菜单的方法是通过构造函数。 例如,默认的多选菜单

julia> menu = MultiSelectMenu(options, pagesize=5);

julia> request(menu) # ASCII is used by default
[press: Enter=toggle, a=all, n=none, d=done, q=abort]
   [ ] apple
   [X] orange
   [ ] grape
 > [X] strawberry
v  [ ] blueberry

可以用Unicode选择和导航字符来呈现

julia> menu = MultiSelectMenu(options, pagesize=5, charset=:unicode);

julia> request(menu)
[press: Enter=toggle, a=all, n=none, d=done, q=abort]
   ⬚ apple
   ✓ orange
   ⬚ grape
 → ✓ strawberry
↓  ⬚ blueberry

更细粒度的配置也是可能的:

julia> menu = MultiSelectMenu(options, pagesize=5, charset=:unicode, checked="YEP!", unchecked="NOPE", cursor='⧐');

julia> request(menu)
julia> request(menu)
[press: Enter=toggle, a=all, n=none, d=done, q=abort]
   NOPE apple
   YEP! orange
   NOPE grape
 ⧐ YEP! strawberry
↓  NOPE blueberry

除了整体 [医]字符 选项,为 RadioMenu 可配置的选项是:

* 光标::Char='>'/'→':用于光标的字符 * up_arrow::Char='^|/'↑':用于向上箭头的字符 * down_arrow::Char='v'|'↓':用于向下箭头的字符 * updown_arrow::Char='I'|'↕':在单行页面中用于向上/向下箭头的字符 * scroll_wrap::Bool=false:可选择在菜单的开头/结尾换行 * ctrl_c_interrupt::Bool=true:如果 错误,返回空 ^C,如果 真的 上抛出InterruptException() ^C

多选门 增加:

* 检查::String="[X]|/"✓":用于checked的字符串 * 未选中::字符串="[ ]"|"⬚"):用于未选中的字符串

您可以创建自己的新菜单类型。 派生自的类型 终结者。配置门努 在构建时配置菜单选项。

旧接口

在Julia1.6之前,并且仍然支持整个Julia1。x,也可以通过调用配置菜单 终结者。配置().

参考资料

代表,代表

atreplinit(f)

在交互式会话中初始化REPL接口之前注册一个要调用的单参数函数;这对于自定义接口很有用。 的论点 f 是REPL对象。 这个函数应该从 .朱莉娅/配置/启动。jl 初始化文件。

[医]终末

菜单

RadioMenu

允许用户从列表中选择单个选项的菜单。

*样本输出*

julia> request(RadioMenu(options, pagesize=4))
Choose your favorite fruit:
^  grape
   strawberry
 > blueberry
v  peach
Your favorite fruit is blueberry!
MultiSelectMenu

允许用户从列表中选择多个选项的菜单。

*样本输出*

julia> request(MultiSelectMenu(options))
Select the fruits you like:
[press: Enter=toggle, a=all, n=none, d=done, q=abort]
   [ ] apple
 > [X] orange
   [X] grape
   [ ] strawberry
   [ ] blueberry
   [X] peach
   [ ] lemon
   [ ] lime
You like the following fruits:
  - orange
  - grape
  - peach

配置

Config(; scroll_wrap=false, ctrl_c_interrupt=true, charset=:ascii, cursor::Char, up_arrow::Char, down_arrow::Char)

通过关键字参数配置选择菜单的行为:

* 滚动_wrap,如果 真的,导致菜单在第一个条目上方或最后一个条目下方滚动时环绕 * ctrl_c_interrupt,如果 真的,抛出一个 InterruptException异常 如果用户在菜单选择期间按Ctrl-C。 如果 错误, 终结者。请求将返回默认结果从 终结者。选定. * [医]字符 影响默认值 光标, 向上,向上,而 down_arrow,并可 :ascii码:unicode * 光标 打印字符以指示将通过点击"Enter"选择的选项。"默认值是'>'或'→',具体取决于 [医]字符. * 向上,向上 显示不包括所述第一条目时打印的字符。 默认值是'^'或'↑',具体取决于 [医]字符. * down_arrow 显示不包括最后一个条目时打印的字符。 默认值为"v"或"↓",具体取决于 [医]字符.

的亚型 配置门努 将打印 光标, 向上,向上,而 down_arrow 根据需要自动,您的 n.写作 方法不应该打印它们。

兼容性

朱莉娅1.6 配置;配置 从Julia1.6开始可用。 在旧版本中,使用全局 配置;配置.

MultiSelectConfig(; charset=:ascii, checked::String, unchecked::String, kwargs...)

通过关键字参数配置多选菜单的行为:

* 检查过 选择选项时要打印的字符串。 默认值为"[X]"或"✓",具体取决于 [医]字符. * 未选中 未选择选项时要打印的字符串。 默认值为"[]"或"⬚",具体取决于 [医]字符.

所有其他关键字参数如下所述 终结者。配置;配置. 检查过未选中 不是自动打印的,应该由您的 n.写作 方法。

兼容性

朱莉娅1.6 多重选择 从Julia1.6开始可用。 在旧版本中,使用全局 配置;配置.

config( <see arguments> )

仅关键字功能配置全局菜单参数

*论点*

* 字符集::符号=:na:要使用的ui字符(:ascii码:unicode);被其他参数复盖 * 光标::Char='>'/'→':用于光标的字符 * up_arrow::Char='^|/'↑':用于向上箭头的字符 * down_arrow::Char='v'|'↓':用于向下箭头的字符 * 检查::String="[X]|/"✓":用于checked的字符串 * 未选中::字符串="[ ]"|"⬚"):用于未选中的字符串 * 滚动::符号=:nowrap:如果 :包装 将光标环绕在顶部和底部,如果 :nowrap 不换行光标 * suppress_output::Bool=false:忽略遗留参数,通过 抑制输出 作为关键字参数 请求 相反。 * ctrl_c_interrupt::Bool=true:如果 错误,空空返回 ^C,如果 真的 上抛出InterruptException() ^C

兼容性

朱莉娅1.6截至朱莉娅1.6, 配置;配置 被弃用。 使用方法 配置;配置多重选择 相反。

用户交互

request(m::AbstractMenu; cursor=1)

显示菜单并进入交互模式。 光标 指示用于初始光标位置的项目编号。 光标 可以是一个 Int型 或一个 重新值{Int}. 后者对于从外部观察和控制光标位置是有用的。

申报表 选定(m).

兼容性

朱莉娅1.6 光标 参数需要Julia1.6或更高版本。

request([term,] msg::AbstractString, m::AbstractMenu)

速记 println(msg);请求(m).

AbstractMenu扩展接口

的任何子类型 [医]抽象门 必须是可变的,并且必须包含字段 页面化::Intpageoffset::Int. 任何子类型还必须实现以下功能:

pick(m::AbstractMenu, cursor::Int)

定义当用户在菜单打开时按下Enter键时发生的情况。 如果 真的 被退回, 请求() 会退出。 光标 索引选择的位置。

cancel(m::AbstractMenu)

定义当用户取消('q’或ctrl-c)菜单时会发生什么。 请求() 调用此函数后将始终退出。

writeline(buf::IO, m::AbstractMenu, idx::Int, iscursor::Bool)

在索引处写入选项 idx布夫. [医]安全,如果 真的,表示此项位于当前光标位置(将通过点击"Enter"选择的那个)。

如果 m 是一个 配置门努, [医]终末 将打印光标指示器。 否则被呼叫者被期望处理这样的打印。

兼容性

朱莉娅1.6 n.写作 要求Julia1.6或更高。

在Julia的旧版本中,这是 writeLine(buf::IO,m::AbstractMenu,idx,iscursor::Bool)m 被假定为未配置。 选择和光标指示器可以从 终结者。配置;配置.

所有Julia1都支持这个较旧的功能。X版本,但将在Julia2.0中删除。

它还必须实现 选项数字,数字:

options(m::AbstractMenu)

返回要在当前页面中显示为选项的字符串列表。

或者,实现 数字,数字,在这种情况下 选项 是不需要的。

numoptions(m::AbstractMenu) -> Int

返回菜单中的选项数 m. 默认值为 长度(选项(m)).

兼容性

Julia1.6此功能需要Julia1.6或更高版本。

如果子类型没有命名的字段 选定,它还必须实现

selected(m::AbstractMenu)

返回有关用户选择的选项的信息。 默认情况下,它返回 m.选定.

以下是可选的,但可以允许额外的自定义:

header(m::AbstractMenu) -> String

返回要在菜单上方打印的标题字符串。 默认为""。

keypress(m::AbstractMenu, i::UInt32) -> Bool

处理任何非标准按键事件。 如果 真的 被退回, 终结者。请求将退出。 默认值为 错误.