交互式实用程序
此模块用于交互式工作。它在 交互模式 下自动加载。
Base.Docs.apropos
— 函数apropos([io::IO=stdout], pattern::Union{AbstractString,Regex})
搜索可用的文档字符串,查找包含 pattern
的条目。
当 pattern
是字符串时,不区分大小写。结果打印到 io
。
可以通过在 REPL 的帮助模式下将查询用双引号括起来来调用 apropos
help?> "pattern"
InteractiveUtils.varinfo
— 函数varinfo(m::Module=Main, pattern::Regex=r""; all=false, imported=false, recursive=false, sortby::Symbol=:name, minsize::Int=0)
返回一个 Markdown 表格,其中包含有关模块中导出全局变量的信息,可以选择限制为与 pattern
匹配的变量。
内存消耗估计是对象内部结构大小的近似下限。
all
:还列出模块中定义的非导出对象、已弃用的对象和编译器生成的物体。imported
:还列出从其他模块显式导入的对象。recursive
:递归地包含子模块中的对象,并在每个子模块中观察相同的设置。sortby
:按列排序结果。选项包括:name
(默认)、:size
和:summary
。minsize
:仅包含大小至少为minsize
字节的对象。默认为0
。
varinfo
的输出仅用于显示目的。另请参阅 names
以获取模块中定义的符号数组,该数组适用于更通用的操作。
InteractiveUtils.versioninfo
— 函数versioninfo(io::IO=stdout; verbose::Bool=false)
打印有关正在使用的 Julia 版本的信息。输出由布尔关键字参数控制
verbose
:打印所有其他信息
此函数的输出可能包含敏感信息。在共享输出之前,请查看输出并删除任何不应公开共享的数据。
另请参阅:VERSION
。
InteractiveUtils.methodswith
— 函数methodswith(typ[, module or function]; supertypes::Bool=false])
返回一个具有类型为 typ
的参数的方法数组。
可选的第二个参数将搜索限制在特定的模块或函数(默认为所有顶级模块)。
如果关键字 supertypes
为 true
,则还返回具有 typ
的父类型的参数,但不包括类型 Any
。
InteractiveUtils.subtypes
— 函数subtypes(T::DataType)
返回 DataType T
的直接子类型的列表。请注意,包括所有当前加载的子类型,包括当前模块中不可见的子类型。
另请参阅 supertype
、supertypes
、methodswith
。
示例
julia> subtypes(Integer)
3-element Vector{Any}:
Bool
Signed
Unsigned
InteractiveUtils.supertypes
— 函数InteractiveUtils.edit
— 方法edit(path::AbstractString, line::Integer=0, column::Integer=0)
编辑文件或目录,可以选择提供要编辑文件的行号。当您退出编辑器时返回到 julia
提示符。可以通过将 JULIA_EDITOR
、VISUAL
或 EDITOR
设置为环境变量来更改编辑器。
另请参阅 define_editor
。
InteractiveUtils.edit
— 方法edit(function, [types])
edit(module)
编辑函数的定义,可以选择指定一个类型元组以指示要编辑哪个方法。对于模块,打开主源文件。模块需要先使用 using
或 import
加载。
模块上的 edit
需要至少 Julia 1.1 版本。
为了确保可以在给定行打开文件,您可能需要先调用 define_editor
。
InteractiveUtils.@edit
— 宏InteractiveUtils.define_editor
— 函数define_editor(fn, pattern; wait=false)
定义一个新的与 pattern
匹配的编辑器,该编辑器可用于使用 fn
打开文件(可能在给定的行号)。
fn
参数是一个函数,用于确定如何使用给定的编辑器打开文件。它应该接受四个参数,如下所示
cmd
- 编辑器的基本命令对象path
- 要打开的源文件的路径line
- 在该行打开编辑器column
- 在该列打开编辑器
无法使用命令或特定列打开到特定行的编辑器可以忽略 line
和/或 column
参数。fn
回调必须返回一个合适的 Cmd
对象以打开文件,或者返回 nothing
以指示它们无法编辑此文件。使用 nothing
指示此编辑器不适合当前环境,应尝试其他编辑器。可以通过直接将回调推送到向量 EDITOR_CALLBACKS
中来添加更多通用的编辑挂钩,这些挂钩不必生成外部命令。
pattern
参数是一个字符串、正则表达式或字符串和正则表达式的数组。为了调用 fn
,其中一个模式必须与 EDITOR
、VISUAL
或 JULIA_EDITOR
的值匹配。对于字符串,字符串必须等于编辑器命令的第一个单词的 basename
,以及其扩展名(如果有)。例如,“vi”不匹配“vim -g”,但匹配“/usr/bin/vi -m”;它也匹配 vi.exe
。如果 pattern
是正则表达式,则将其与所有编辑器命令(作为 shell 转义的字符串)匹配。如果有多个编辑器匹配,则使用最近添加的编辑器。
默认情况下,julia 不会等待编辑器关闭,而是将其在后台运行。但是,如果编辑器是基于终端的,您可能需要设置 wait=true
,julia 将等待编辑器关闭后再继续。
如果设置了其中一个编辑器环境变量,但没有编辑器条目与之匹配,则会调用默认编辑器条目
(cmd, path, line, column) -> `$cmd $path`
请注意,许多编辑器已定义。以下所有命令都应该可以工作
- emacs
- emacsclient
- vim
- nvim
- nano
- micro
- kak
- helix
- textmate
- mate
- kate
- subl
- atom
- notepad++
- Visual Studio Code
- open
- pycharm
- bbedit
示例
以下定义了基于终端的emacs
的使用方法
define_editor(
r"\bemacs\b.*\s(-nw|--no-window-system)\b", wait=true) do cmd, path, line
`$cmd +$line $path`
end
define_editor
是在 Julia 1.4 中引入的。
InteractiveUtils.less
— 方法less(file::AbstractString, [line::Integer])
使用默认分页器显示文件,可以选择提供起始行号。退出分页器后返回到julia
提示符。
InteractiveUtils.less
— 方法less(function, [types])
使用默认分页器显示函数的定义,可以选择指定一个类型元组来指示要查看哪个方法。
InteractiveUtils.@less
— 宏InteractiveUtils.@which
— 宏InteractiveUtils.@functionloc
— 宏@functionloc
应用于函数或宏调用时,它会计算指定调用的参数,并返回一个元组(filename,line)
,该元组给出将为这些参数调用的方法的位置。它会调用functionloc
函数。
InteractiveUtils.@code_lowered
— 宏@code_lowered
计算函数或宏调用的参数,确定其类型,然后对结果表达式调用code_lowered
。
InteractiveUtils.@code_typed
— 宏@code_typed
计算函数或宏调用的参数,确定其类型,然后对结果表达式调用code_typed
。使用可选参数optimize
与
@code_typed optimize=true foo(x)
控制是否也应用其他优化(例如内联)。
InteractiveUtils.code_warntype
— 函数code_warntype([io::IO], f, types; debuginfo=:default)
将与给定泛型函数和类型签名匹配的方法的已降低和类型推断的 AST 打印到io
(默认为stdout
)。AST 以一种方式进行注释,以便使可能对性能造成问题的“非叶”类型得到强调(如果可用颜色,则以红色显示)。这可以作为类型不稳定的警告。
并非所有非叶类型都对性能特别不利,并且特定类型的性能特征是编译器的实现细节。code_warntype
会在可能存在性能问题的情况下将类型着色为红色,因此即使某些类型不会影响性能,也可能会被着色为红色。具体类型的较小的联合通常不会成为问题,因此这些类型会以黄色突出显示。
关键字参数debuginfo
可以是:source
或:none
(默认值),以指定代码注释的详细程度。
有关更多信息,请参阅手册的性能提示页面中的@code_warntype
部分。
InteractiveUtils.@code_warntype
— 宏@code_warntype
计算函数或宏调用的参数,确定其类型,然后对结果表达式调用code_warntype
。
InteractiveUtils.code_llvm
— 函数code_llvm([io=stdout,], f, types; raw=false, dump_module=false, optimize=true, debuginfo=:default)
将为运行与给定泛型函数和类型签名匹配的方法生成的 LLVM 位码打印到io
。
如果optimize
关键字未设置,则将在 LLVM 优化之前显示代码。所有元数据和dbg.*调用都将从打印的位码中删除。对于完整的 IR,将raw
关键字设置为true。要转储封装函数(带声明)的整个模块,请将dump_module
关键字设置为true。关键字参数debuginfo
可以是source(默认值)或none之一,以指定代码注释的详细程度。
InteractiveUtils.@code_llvm
— 宏@code_llvm
计算函数或宏调用的参数,确定其类型,然后对结果表达式调用code_llvm
。通过将这些关键字及其值放在函数调用之前来设置可选的关键字参数raw
、dump_module
、debuginfo
、optimize
,如下所示
@code_llvm raw=true dump_module=true debuginfo=:default f(x)
@code_llvm optimize=false f(x)
optimize
控制是否也应用其他优化(例如内联)。raw
使所有元数据和dbg.*调用可见。debuginfo
可以是:source
(默认值)或:none
之一,以指定代码注释的详细程度。dump_module
打印封装函数的整个模块。
InteractiveUtils.code_native
— 函数code_native([io=stdout,], f, types; syntax=:intel, debuginfo=:default, binary=false, dump_module=true)
将为运行与给定泛型函数和类型签名匹配的方法生成的本机汇编指令打印到io
。
- 通过将
syntax
设置为:intel
(默认值)以获取 Intel 语法或:att
以获取 AT&T 语法来设置汇编语法。 - 通过将
debuginfo
设置为:source
(默认值)或:none
来指定代码注释的详细程度。 - 如果
binary
为true
,则还会打印每个指令的二进制机器代码,并在其前面加上简化的地址。 - 如果
dump_module
为false
,则不打印元数据(如rodata或指令)。 - 如果
raw
为false
,则省略不相关的指令(如安全点函数序言)。
InteractiveUtils.@code_native
— 宏@code_native
计算函数或宏调用的参数,确定其类型,然后对结果表达式调用code_native
。
通过将其放在函数调用之前来设置任何可选的关键字参数syntax
、debuginfo
、binary
或dump_module
,如下所示
@code_native syntax=:intel debuginfo=:default binary=true dump_module=false f(x)
- 通过将
syntax
设置为:intel
(默认值)以获取 Intel 语法或:att
以获取 AT&T 语法来设置汇编语法。 - 通过将
debuginfo
设置为:source
(默认值)或:none
来指定代码注释的详细程度。 - 如果
binary
为true
,则还会打印每个指令的二进制机器代码,并在其前面加上简化的地址。 - 如果
dump_module
为false
,则不打印元数据(如rodata或指令)。
InteractiveUtils.@time_imports
— 宏@time_imports
一个宏,用于执行表达式并生成导入包及其依赖项所花费时间的报告。任何编译时间都将以百分比显示,以及如果有的话,有多少是重新编译的。
每个包或包扩展都会打印一行。显示的持续时间是导入该包本身的时间,不包括加载其任何依赖项的时间。
在 Julia 1.9+ 中,包扩展将显示为 Parent → Extension。
在加载过程中,包会依次导入其所有依赖项,而不仅仅是其直接依赖项。
julia> @time_imports using CSV
50.7 ms Parsers 17.52% compilation time
0.2 ms DataValueInterfaces
1.6 ms DataAPI
0.1 ms IteratorInterfaceExtensions
0.1 ms TableTraits
17.5 ms Tables
26.8 ms PooledArrays
193.7 ms SentinelArrays 75.12% compilation time
8.6 ms InlineStrings
20.3 ms WeakRefStrings
2.0 ms TranscodingStreams
1.4 ms Zlib_jll
1.8 ms CodecZlib
0.8 ms Compat
13.1 ms FilePathsBase 28.39% compilation time
1681.2 ms CSV 92.40% compilation time
此宏至少需要 Julia 1.8
InteractiveUtils.clipboard
— 函数clipboard(x)
将x
的打印形式发送到操作系统剪贴板(“复制”)。
clipboard() -> String
返回一个包含操作系统剪贴板内容的字符串(“粘贴”)。