互動式公用程式

此模組用於互動式工作。它會在互動模式下自動載入。

Base.Docs.apropos函式
apropos([io::IO=stdout], pattern::Union{AbstractString,Regex})

搜尋可用的文件字串,尋找包含 pattern 的項目。

pattern 為字串時,會忽略大小寫。結果會印到 io

apropos 可以透過將查詢用雙引號包起來,從 REPL 的說明模式中呼叫

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,這些 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

傳回一個字串,其中包含作業系統剪貼簿的內容(「貼上」)。