檢視原始碼 IEx.Helpers (IEx v1.16.2)
歡迎使用互動式 Elixir。您目前正在查看模組 IEx.Helpers
的文件,它提供了許多輔助程式,讓 Elixir 的 shell 更令人愉悅。
此訊息是由呼叫輔助程式 h()
觸發的,通常稱為 h/0
(因為它預期 0 個引數)。
您可以使用 h/1
函式來呼叫任何 Elixir 模組或函式的文件
iex> h(Enum)
iex> h(Enum.map)
iex> h(Enum.reverse/1)
您也可以使用 i/1
函式來內省 shell 中的任何值
iex> i("hello")
還有許多其他可用的輔助程式,以下是一些範例
b/1
- 列印給定模組的回呼資訊和文件c/1
- 編譯檔案c/2
- 編譯檔案並將位元組碼寫入給定的路徑cd/1
- 變更目前目錄clear/0
- 清除畫面exports/1
- 顯示模組中的所有匯出(函式 + 巨集)flush/0
- 清除傳送到 shell 的所有訊息h/0
- 列印此說明訊息h/1
- 列印給定模組、函式或巨集的說明i/0
- 列印最後一個值的資訊i/1
- 列印給定項的資訊ls/0
- 列出目前目錄的內容ls/1
- 列出指定目錄的內容open/1
- 在您的編輯器中開啟給定模組或函式的原始碼pid/1
- 從字串建立 PIDpid/3
- 使用傳遞的 3 個整數引數建立 PIDport/1
- 從字串建立 portport/2
- 使用傳遞的 2 個非負整數建立 portpwd/0
- 列印目前的作業目錄r/1
- 重新編譯指定的模組的原始檔recompile/0
- 重新編譯目前的專案ref/1
- 從字串建立參考ref/4
- 使用傳遞的 4 個整數引數建立參考runtime_info/0
- 列印執行時期資訊(版本、記憶體使用量、統計資料)t/1
- 列印指定模組或函式的類型v/0
- 從歷程記錄中擷取最後一個值v/1
- 從歷程記錄中擷取第 n 個值
可以使用 h/1
輔助函式本身直接從命令列查詢所有這些函式的說明。請嘗試
iex> h(v/0)
列出所有可用的 IEx 輔助函式,這實際上是 IEx.Helpers
模組中的所有匯出(函式和巨集)
iex> exports(IEx.Helpers)
此模組還包括用於除錯目的的輔助函式,請參閱 IEx.break!/4
以取得更多資訊。
若要深入了解 IEx,請輸入 h(IEx)
。
摘要
函式
列印指定的回呼函式的文件。
在形狀為 Module.function/arity
的 AST 中設定中斷點,並具有指定的 stops
數量。
在 module
、function
和 arity
中設定中斷點,並具有指定的 stops
數量。
將所有中斷點列印至終端機。
編譯給定的檔案。
將目前工作目錄變更為給定的路徑。
清除主控台畫面。
繼續執行目前的程序。
列印給定模組所匯出的所有函式和巨集清單。
清除傳送至 shell 收件匣的所有訊息並列印出來。
列印 IEx.Helpers
的文件。
列印給定模組或給定 函式/項數
配對的文件。
列印任何給定項目的資料類型資訊。
注入 路徑
中檔案的內容。
類似於 import_file
,但僅在檔案可用時匯入檔案。
使用給定的引數呼叫 import/2
,但僅在模組可用時。
載入給定模組的 BEAM 程式碼(並確保先前任何舊版本都已適當清除)。
列印給定目錄內容的清單。
前往目前中斷點的下一行。
將給定模組的 BEAM 程式碼部署至節點清單。
開啟目前窺探位置。
開啟給定的 模組
、模組.函式/項數
或 {檔案, 行}
。
從 字串
或 原子
建立 PID。
使用傳遞給函式的 3 個非負整數建立 PID。
從 字串
建立 Port。
從兩個非負整數建立 Port。
列印目前工作目錄。
重新編譯並重新載入給定的 模組
或 模組
。
重新編譯目前的 Mix 專案或 Mix 安裝相依關係。
從 字串
建立一個參考。
從其 4 個非負整數組成部分建立一個參考。
從所有模組中移除所有中斷點和儀器。
從 module
中移除所有中斷點和儀器。
將具有給定 id
的中斷點中的待處理停止數設定為零。
將給定模組、函式和 arity 中的待處理停止數設定為零。
透過啟動新的 shell 程序來重生目前的 shell。
列印 VM/執行時間資訊,例如版本、記憶體使用量和統計資料。
就像 runtime_info/0
,只不過接受主題或主題清單。
列印給定模組或給定函式/arity 配對的類型。
使用給定的引數呼叫 use/2
,但前提是模組可用。
傳回歷史記錄中第 n
個表達式的值。
在 pry 會話中列印目前的位址和堆疊追蹤。
函式
列印指定的回呼函式的文件。
它也接受單一模組引數來列出所有可用的行為回呼。
範例
iex> b(Mix.Task.run/1)
iex> b(Mix.Task.run)
iex> b(GenServer)
在形狀為 Module.function/arity
的 AST 中設定中斷點,並具有指定的 stops
數量。
請參閱 IEx.break!/4
以取得 IEx 中中斷點的完整說明。
範例
break! URI.decode_query/2
在 module
、function
和 arity
中設定中斷點,並具有指定的 stops
數量。
請參閱 IEx.break!/4
以取得 IEx 中中斷點的完整說明。
範例
break! URI, :decode_query, 2
將所有中斷點列印至終端機。
編譯給定的檔案。
它預期一個要編譯的檔案清單,以及一個可寫入編譯程式碼的選用路徑。預設情況下,檔案會在記憶體中編譯。若要將編譯的檔案寫入目前的目錄,可以給予一個空字串。
它會傳回編譯模組的名稱。
如果你想要重新編譯現有的模組,請改為查看 r/1
。
範例
在以下範例中,我們傳遞一個目錄給 c/2
函式,c/2
函式會將編譯的 .beam
檔案寫入該目錄中。此目錄在 Erlang/Elixir 系統中通常稱為「ebin」
iex> c(["foo.ex", "bar.ex"], "ebin")
[Foo, Bar]
在編譯一個檔案時,不需要將它包在清單中
iex> c("baz.ex")
[Baz]
將目前工作目錄變更為給定的路徑。
清除主控台畫面。
此函式僅在 shell 上啟用 ANSI 跳脫碼時才會運作,這表示此函式預設在 Windows 電腦上無法使用。
繼續執行目前的程序。
這通常會由使用 IEx.pry/0
或 IEx.break!/4
啟動的階段呼叫。這允許目前的程序執行到下一個中斷點,而無需要求許可即可自動將控制權讓回給 IEx。
如果你只是想移到目前中斷點的下一行,請改用 n/0
或 next/0
。
如果正在執行的程序終止,會啟動一個新的 IEx 階段。
當程序執行時,使用者將不再能控制 shell。如果你想啟動一個新的 shell,請改用 respawn/0
。
列印給定模組所匯出的所有函式和巨集清單。
清除傳送至 shell 收件匣的所有訊息並列印出來。
列印 IEx.Helpers
的文件。
列印給定模組或給定 函式/項數
配對的文件。
範例
iex> h(Enum)
它也接受格式為 function/arity
和 module.function/arity
的函式,例如
iex> h(receive/1)
iex> h(Enum.all?/2)
iex> h(Enum.all?)
列印任何給定項目的資料類型資訊。
如果沒有提供參數,則使用前一個表達式的值。
範例
iex> i(1..5)
將列印
Term
1..5
Data type
Range
Description
This is a struct. Structs are maps with a __struct__ key.
Reference modules
Range, Map
注入 路徑
中檔案的內容。
這等於取得所有檔案內容,然後一次全部貼到 IEx 中並執行。
預設情況下,與您啟動 IEx 時所在的目錄相同的 .iex.exs
檔案內容會自動匯入。請參閱 IEx
模組文件中的「.iex.exs」區段,以取得更多資訊。
path
必須是字串文字,並會透過 Path.expand/1
自動展開。
範例
# ~/file.exs
value = 13
# in the shell
iex(1)> import_file("~/file.exs")
13
iex(2)> value
13
類似於 import_file
,但僅在檔案可用時匯入檔案。
預設情況下,當指定的檔案不存在時,import_file/1
會失敗。然而,由於 import_file/1
是在編譯時展開的,因此無法有條件地匯入檔案,因為巨集總是會展開
# This raises a File.Error if ~/.iex.exs doesn't exist.
if "~/.iex.exs" |> Path.expand() |> File.exists?() do
import_file("~/.iex.exs")
end
此巨集會代表使用者檢查檔案是否存在,以解決此問題。
使用給定的引數呼叫 import/2
,但僅在模組可用時。
這讓您可以在 .iex.exs
檔案(包括 ~/.iex.exs
)中放置匯入,而不會在您開啟未提供該模組的主控台時產生編譯錯誤。
範例
# In ~/.iex.exs
import_if_available(Ecto.Query)
載入給定模組的 BEAM 程式碼(並確保先前任何舊版本都已適當清除)。
當你知道模組的位元組碼已在檔案系統中更新,且你想要告訴 VM 載入它時,此函式很有用。
列印給定目錄內容的清單。
如果 path
指向一個檔案,則印出其完整路徑。
用於 next/0
的捷徑。
前往目前中斷點的下一行。
這通常是由使用 IEx.break!/4
啟動的階段所呼叫。如果你想要移動到下一個中斷點,而不是下一行,請改呼叫 continue/0
。
當程序執行時,使用者將不再能控制 shell。如果你想啟動一個新的 shell,請改用 respawn/0
。
將給定模組的 BEAM 程式碼部署至節點清單。
當你有已編譯或在本地更新的程式碼,且你想要在其他節點上執行時,此函式對於開發和除錯很有用。
節點清單預設為所有已連線節點的清單。
如果找不到模組的物件碼(例如「.beam」檔案)時,會傳回 {:error, :nofile}
。
範例
iex> nl(HelloWorld)
{:ok,
[
{:node1@easthost, :loaded, HelloWorld},
{:node1@westhost, :loaded, HelloWorld}
]}
iex> nl(NoSuchModuleExists)
{:error, :nofile}
開啟目前窺探位置。
此指令只會在透過 IEx.pry/0
手動啟動的 pry 階段內,或透過 IEx.break!/4
設定的中斷點中運作。在一般的 IEx
階段中呼叫此函式會印出一個錯誤。
請注意,當探索預先編譯的原始碼(例如 Elixir 本身)時,open/0
位置可能不存在。
如需更多資訊,以及開啟任何模組或函式,請參閱 open/1
。
開啟給定的 模組
、模組.函式/項數
或 {檔案, 行}
。
此函式使用 ELIXIR_EDITOR
環境變數,如果前者不可用,則會改用 EDITOR
。
預設情況下,它會嘗試使用 file:line
符號來開啟檔案和行。例如,對於 Sublime Text,你可以將其設定為
ELIXIR_EDITOR="subl"
然後它會嘗試以以下方式開啟它
subl path/to/file:line
對於 Visual Studio Code,一旦在命令列中啟用,你可以將其設定為
ELIXIR_EDITOR="code --goto"
重要的是,你必須選擇一個不會阻擋或嘗試在終端機中直接執行編輯器的編輯器指令。基於命令列的編輯器可能需要額外的設定,以便它們在一個獨立的視窗中開啟指定的檔案和行。
對於更複雜的使用案例,你可以使用 __FILE__
和 __LINE__
符號,將檔案和行號明確插入命令中
ELIXIR_EDITOR="my_editor +__LINE__ __FILE__"
由於此函式會列印編輯器傳回的結果,如果你偏好顯示位置而非開啟位置,可以將 ELIXIR_EDITOR
設為「echo」。
請注意,在開啟預編譯的原始碼時,位置可能不存在。
範例
iex> open(MyApp)
iex> open(MyApp.fun/2)
iex> open({"path/to/file", 1})
從 字串
或 原子
建立 PID。
範例
iex> pid("0.21.32")
#PID<0.21.32>
iex> pid("#PID<0.21.32>")
#PID<0.21.32>
iex> pid(:init)
#PID<0.0.0>
使用傳遞給函式的 3 個非負整數建立 PID。
範例
iex> pid(0, 21, 32)
#PID<0.21.32>
iex> pid(0, 64, 2048)
#PID<0.64.2048>
從 字串
建立 Port。
範例
iex> port("0.4")
#Port<0.4>
從兩個非負整數建立 Port。
範例
iex> port(0, 8080)
#Port<0.8080>
iex> port(0, 443)
#Port<0.443>
列印目前工作目錄。
重新編譯並重新載入給定的 模組
或 模組
。
請注意,定義在與 modules
相同檔案中的所有模組都會重新編譯並重新載入。如果你想要重新載入多個模組,最好同時重新載入它們,例如 r [Foo, Bar]
。這對於避免錯誤警告非常重要,因為模組只會在記憶體中重新載入,而其最新資訊並未持續儲存在磁碟中。請參閱以下的「記憶體中重新載入」區段。
此函式旨在用於開發和除錯目的。請勿在生產程式碼中依賴它。
記憶體中重新載入
當我們在 IEx 中重新載入模組時,我們會重新編譯模組原始碼,更新其在記憶體中的內容。磁碟中的原始 .beam
檔案(可能是模組第一個定義的檔案)完全不會變更。
由於文件、類型規格和匯出資訊會從 .beam 檔案載入,因此在你呼叫此函式時不會重新載入它們。
重新編譯目前的 Mix 專案或 Mix 安裝相依關係。
此輔助程式需要在目前的 IEx 會話中呼叫 Mix.install/2
,或與 IEx 一起啟動,例如 iex -S mix
。
在 Mix.install/1
的情況下,它會重新編譯安裝期間宣告的任何過時路徑相依性。在專案中,它會重新編譯任何過時的模組。
請注意,此函數僅重新編譯 Elixir 模組,而不重新載入組態或重新啟動應用程式。這表示任何長時間執行的程序都可能在重新編譯時崩潰,因為已變更的模組會暫時移除並重新編譯,而不會經過適當的程式碼變更回呼。
如果您想要重新載入單一模組,請考慮改用 r(ModuleName)
。
此函式旨在用於開發和除錯目的。請勿在生產程式碼中依賴它。
選項
:force
- 當為true
時,強制應用程式重新編譯
從 字串
建立一個參考。
範例
iex> ref("0.1.2.3")
#Reference<0.1.2.3>
從其 4 個非負整數組成部分建立一個參考。
範例
iex> ref(0, 1, 2, 3)
#Reference<0.1.2.3>
從所有模組中移除所有中斷點和儀器。
從 module
中移除所有中斷點和儀器。
將具有給定 id
的中斷點中的待處理停止數設定為零。
如果存在此中斷點 ID,則傳回 :ok
。否則傳回 :not_found
。
請注意,模組在重設時仍保持「已編制工具」。如果您想從模組中有效移除所有中斷點和編制工具程式碼,請改用 remove_breaks/1
。
將給定模組、函式和 arity 中的待處理停止數設定為零。
如果模組沒有編制工具,或給定的函式沒有中斷點,則為空操作,並傳回 :not_found
。否則傳回 :ok
。
請注意,模組在重設時仍保持「已編制工具」。如果您想從模組中有效移除所有中斷點和編制工具程式碼,請改用 remove_breaks/1
。
透過啟動新的 shell 程序來重生目前的 shell。
列印 VM/執行時間資訊,例如版本、記憶體使用量和統計資料。
可透過 runtime_info/1
取得其他主題。
如需更多指標、資訊和除錯功能,請參閱 Recon 專案。
就像 runtime_info/0
,只不過接受主題或主題清單。
例如,主題 :applications
會列出已載入的應用程式。
列印給定模組或給定函式/arity 配對的類型。
範例
iex> t(Enum)
@type t() :: Enumerable.t()
@type acc() :: any()
@type element() :: any()
@type index() :: integer()
@type default() :: any()
iex> t(Enum.t/0)
@type t() :: Enumerable.t()
iex> t(Enum.t)
@type t() :: Enumerable.t()
使用給定的引數呼叫 use/2
,但前提是模組可用。
這讓您可以在 .iex.exs
檔案(包括 ~/.iex.exs
)中使用模組,而不會在開啟模組不可用的主控台時發生編譯錯誤。
範例
# In ~/.iex.exs
use_if_available(Phoenix.HTML)
傳回歷史記錄中第 n
個表達式的值。
n
可以為負值:如果是,則會傳回相對於目前值的相對應表達式值。例如,v(-2)
會傳回在最後一個評估表達式之前評估的表達式值。特別是,v(-1)
會傳回最後一個評估表達式的結果,而 v()
則會執行相同的動作。
範例
iex(1)> "hello" <> " world"
"hello world"
iex(2)> 40 + 2
42
iex(3)> v(-2)
"hello world"
iex(4)> v(2)
42
iex(5)> v()
42
在 pry 會話中列印目前的位址和堆疊追蹤。
它預期一個 radius
,用來選擇列印目前行之前和之後的列數。預設 radius
為兩行
Location: lib/iex/lib/iex/helpers.ex:79
77:
78: def recompile do
79: require IEx; IEx.pry()
80: if mix_started?() do
81: config = Mix.Project.config
(IEx.Helpers) lib/iex/lib/iex/helpers.ex:78: IEx.Helpers.recompile/0
此指令只會在透過 IEx.pry/0
手動啟動的 pry 階段內,或透過 IEx.break!/4
設定的中斷點中運作。在一般的 IEx
階段中呼叫此函式會印出一個錯誤。
請記住,在偵查預編譯原始碼(例如 Elixir 本身)時,whereami/1
位置可能不存在。