互動式公用程式
此模組用於互動式工作。它會在互動模式下自動載入。
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
。
第二個選用參數將搜尋限制在特定模組或函數(預設為所有頂層模組)。
如果關鍵字 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,這些 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
傳回一個字串,其中包含作業系統剪貼簿的內容(「貼上」)。