交互式实用程序

此模块用于交互式工作。它在 交互模式 下自动加载。

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 的参数的方法数组。

可选的第二个参数将搜索限制在特定的模块或函数(默认为所有顶级模块)。

如果关键字 supertypestrue,则还返回具有 typ 的父类型的参数,但不包括类型 Any

InteractiveUtils.subtypes函数
subtypes(T::DataType)

返回 DataType T 的直接子类型的列表。请注意,包括所有当前加载的子类型,包括当前模块中不可见的子类型。

另请参阅 supertypesupertypesmethodswith

示例

julia> subtypes(Integer)
3-element Vector{Any}:
 Bool
 Signed
 Unsigned
InteractiveUtils.supertypes函数
supertypes(T::Type)

返回一个元组 (T, ..., Any),其中包含 T 及其所有超类型,由对 supertype 函数的连续调用确定,按 <: 的顺序列出,并以 Any 结尾。

另请参阅 subtypes

示例

julia> supertypes(Int)
(Int64, Signed, Integer, Real, Number, Any)
InteractiveUtils.edit方法
edit(path::AbstractString, line::Integer=0, column::Integer=0)

编辑文件或目录,可以选择提供要编辑文件的行号。当您退出编辑器时返回到 julia 提示符。可以通过将 JULIA_EDITORVISUALEDITOR 设置为环境变量来更改编辑器。

另请参阅 define_editor

InteractiveUtils.edit方法
edit(function, [types])
edit(module)

编辑函数的定义,可以选择指定一个类型元组以指示要编辑哪个方法。对于模块,打开主源文件。模块需要先使用 usingimport 加载。

Julia 1.1

模块上的 edit 需要至少 Julia 1.1 版本。

为了确保可以在给定行打开文件,您可能需要先调用 define_editor

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,其中一个模式必须与 EDITORVISUALJULIA_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
Julia 1.4

define_editor是在 Julia 1.4 中引入的。

InteractiveUtils.less方法
less(file::AbstractString, [line::Integer])

使用默认分页器显示文件,可以选择提供起始行号。退出分页器后返回到julia提示符。

InteractiveUtils.less方法
less(function, [types])

使用默认分页器显示函数的定义,可以选择指定一个类型元组来指示要查看哪个方法。

InteractiveUtils.@which
@which

应用于函数或宏调用时,它会计算指定调用的参数,并返回将为这些参数调用的方法的Method对象。应用于变量时,它会返回绑定变量的模块。它会调用which函数。

另请参阅:@less@edit

InteractiveUtils.@functionloc
@functionloc

应用于函数或宏调用时,它会计算指定调用的参数,并返回一个元组(filename,line),该元组给出将为这些参数调用的方法的位置。它会调用functionloc函数。

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_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。通过将这些关键字及其值放在函数调用之前来设置可选的关键字参数rawdump_moduledebuginfooptimize,如下所示

@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来指定代码注释的详细程度。
  • 如果binarytrue,则还会打印每个指令的二进制机器代码,并在其前面加上简化的地址。
  • 如果dump_modulefalse,则不打印元数据(如rodata或指令)。
  • 如果rawfalse,则省略不相关的指令(如安全点函数序言)。

另请参阅:@code_nativecode_llvmcode_typedcode_lowered

InteractiveUtils.@code_native
@code_native

计算函数或宏调用的参数,确定其类型,然后对结果表达式调用code_native

通过将其放在函数调用之前来设置任何可选的关键字参数syntaxdebuginfobinarydump_module,如下所示

@code_native syntax=:intel debuginfo=:default binary=true dump_module=false f(x)
  • 通过将syntax设置为:intel(默认值)以获取 Intel 语法或:att以获取 AT&T 语法来设置汇编语法。
  • 通过将debuginfo设置为:source(默认值)或:none来指定代码注释的详细程度。
  • 如果binarytrue,则还会打印每个指令的二进制机器代码,并在其前面加上简化的地址。
  • 如果dump_modulefalse,则不打印元数据(如rodata或指令)。

另请参阅:code_native@code_llvm@code_typed@code_lowered

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

此宏至少需要 Julia 1.8

InteractiveUtils.clipboard函数
clipboard(x)

x的打印形式发送到操作系统剪贴板(“复制”)。

clipboard() -> String

返回一个包含操作系统剪贴板内容的字符串(“粘贴”)。