首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IEx.Helpers

欢迎来到Interactive 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-从字符串创建PID
  • pid/3-使用传递的3个整数参数创建一个PID
  • pwd/0-打印当前工作目录
  • r/1-重新编译给定模块的源文件
  • recompile/0-重新编译当前项目
  • runtime_info/0 - 打印运行时信息(版本,内存使用情况,统计信息)
  • v/0-从历史记录中检索最后一个值
  • v/1-从历史记录中检索第n个值

所有这些函数的帮助可以直接从命令行使用h/1帮助程序本身进行查询。尝试:

iex> h(v/0)

要列出所有可用的IEx助手,这实际上是IEx.Helpers模块中的所有导出(函数和宏):

iex> exports(IEx.Helpers)

此模块还包括用于调试的帮助程序,想了解更多信息请参阅IEx.break!/4

若要了解更多关于整个IEX的信息,请键入h(IEx)...

功能

b(term)

打印给定回调函数的文档

break!(ast, stops \ 1)

基于宏的快捷方式 IEx.break!/4

break!(module, function, arity, stops \ 1)

建立一个断点在modulefunctionarity与给定数stops

breaks()

将所有断点打印到终端

c(files, path \ :in_memory)

编译给定的文件。

cd(directory)

将当前工作目录更改为给定路径。

clear()

清除控制台屏幕。

continue()

继续执行当前进程

exports(module \ Kernel)

打印由给定模块导出的所有函数和宏的列表

flush()

刷新所有发送到shell的消息并将其打印出来

h()

打印文档 IEx.Helpers

h(term)

打印给定模块或给定函数/参数对的文档

i(term \ v(-1))

打印有关任何给定术语的数据类型的信息

import_file(path)

评估文件的内容,path就好像它直接输入到shell中一样

import_file_if_available(path)

类似于import_file文件但只能导入文件

import_if_available(quoted_module, opts \ [])

调用import/2给定的参数,但只有在模块可用的情况下

l(module)

加载给定模块的BEAM代码(并确保之前的旧版本已被正确清除)

ls(path \ ".")

打印给定目录内容的列表

nl(nodes \ Node.list(), module)

将给定模块的BEAM代码部署到节点列表中

open()

打开当前的撬动位置

open(term)

打开给定的模块,模块/功能/参数或 {file, line}

pid(string)

从中创建一个PID string

pid(x, y, z)

创建一个带有3个非负整数的PID,作为参数传递给该函数

pwd()

打印当前工作目录

r(module)

重新编译并重新载入给定的 module

recompile()

重新编译当前的Mix应用程序

remove_breaks()

从所有模块中删除所有断点和检测

remove_breaks(module)

从中删除所有断点和检测 module

reset_break(id)

将具有给定id的断点处的挂起停止次数设置为零

reset_break(module, function, arity)

将给定模块,函数和参数中的挂起停止次数设置为零

respawn()

通过启动一个新的shell进程来重新生成当前的shell

runtime_info()

打印vm /运行时信息,如版本,内存使用情况和统计​​信息

s(term)

打印给定模块或给定函数/参数对的规格

t(term)

打印给定模块或给定函数/参数对的类型

v(n \ -1)

返回n历史中第th个表达式的值

whereami(radius \ 2)

在pry会话中打印当前位置

b(term) (macro)

打印给定回调函数的文档。

它还接受单个模块参数来列出所有可用的行为回调。

例子

iex> b(Mix.Task.run/1)
iex> b(Mix.Task.run)
iex> b(GenServer)

break!(ast, stops \ 1) (macro)

基于宏的快捷方式IEx.break!/4

break!(module, function, arity, stops \ 1)

建立在一个断点modulefunctionarity与给定数stops

请参阅IEx.break!/4IEx中有关断点的完整说明。

breaks()

将所有断点打印到终端。

c(files, path \ :in_memory)

编译给定的文件。

它需要编译的文件列表以及将编译后的代码写入(默认为当前目录)的可选路径。编译一个文件时,不需要将其包含在列表中。

它返回已编译模块的名称。

如果您想重新编译现有模块,请r/1改为选中。

例子

iex> c(["foo.ex", "bar.ex"], "ebin")
[Foo, Bar]

iex> c("baz.ex")
[Baz]

cd(directory)

将当前工作目录更改为给定路径。

clear()

清除控制台屏幕。

只有在shell上启用了ANSI转义代码时,此功能才有效,这意味着该功能在Windows计算机上默认不可用。

continue()

继续执行当前进程。

这通常由以IEx.pry/0or 开头的会话调用IEx.break!/4。这允许当前执行直到下一个断点,该断点将自动将控制权返回给IEx,而不会请求撬动权限。

如果正在运行的进程终止,则会启动新的IEx会话。

在执行该过程时,用户将不再控制该shell。如果您宁愿创建一个新的shell,请respawn/0改用它。

exports(module \ Kernel)

打印由给定模块导出的所有函数和宏的列表。

flush()

刷新所有发送到shell的消息并将其打印出来。

h()

打印文档IEx.Helpers

h(term) (macro)

打印给定模块或给定函数/参数对的文档。

例子

iex> h(Enum)

它还接受功能的格式fun/aritymodule.fun/arity,例如:

iex> h receive/1
iex> h Enum.all?/2
iex> h Enum.all?

i(term \ v(-1))

打印有关任何给定术语的数据类型的信息。

如果没有给出参数,则使用前一个表达式的值。

例子

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

import_file(path) (macro)

评估文件的内容,path就好像它直接输入到shell中一样。

path必须是一个文字字符串。path通过自动扩展Path.expand/1

例子

# ~/file.exs
value = 13

# in the shell
iex(1)> import_file "~/file.exs"
13
iex(2)> value
13

import_file_if_available(path) (macro)

类似于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_if_available(quoted_module, opts \ []) (macro)

调用import/2给定的参数,但只有在模块可用的情况下。

这样,如果打开模块不可用的控制台,则可以将导入放入.iex.exs文件(包括~/.iex.exs)中,而不会发生编译错误。

# In ~/.iex.exs
import_if_available Ecto.Query

l(module)

加载给定模块的BEAM代码(并确保之前的旧版本已正确清除)。

当您知道模块的字节码已在文件系统中更新并且您想要通知VM加载它时,此功能非常有用。

ls(path \ ".")

打印给定目录内容的列表。

If path points to a file, prints its full path.

nl(nodes \ Node.list(), module)

将给定模块的BEAM代码部署到节点列表中。

如果您想要在其他节点上运行本地编译或更新的代码,则此功能对开发和调试很有用。

节点列表默认为所有连接节点的列表。

如果在本地无法找到模块的目标代码(即“.beam”文件),则返回{:error, :nofile}

例子

iex> nl(HelloWorld)
{:ok, [{:node1@easthost, :loaded, HelloWorld},
       {:node1@westhost, :loaded, HelloWorld}]}

iex> nl(NoSuchModuleExists)
{:error, :nofile}

open()

打开当前的撬动位置。

此命令只能在通过手动启动的pry会话IEx.pry/0或通过设置的断点进行IEx.break!/4。在常规IEx会话期间调用此函数将会打印一个错误。

请注意,open/0当撬动预编译的源代码时,位置可能不存在,例如Elixir本身。

有关更多信息并打开任何模块或功能,请参阅open/1

open(term) (macro)

打开给定的模块,模块/功能/参数或{file, line}

如果前者不可用,该函数使用ELIXIR_EDITOR环境变量并回退到EDITOR

默认情况下,它尝试使用file:line符号打开文件和行。例如,如果你的编辑器被调用subl,它将打开文件为:

subl path/to/file:line

自定义编辑器通过使用FILELINE符号来支持。例如,vi / vim用户可以设置ELIXIR_EDITOR为:

ELIXIR_EDITOR="vi +__LINE__ __FILE__"

Elixir会正确插值。

由于此功能打印编辑器返回的结果,ELIXIR_EDITOR如果您希望显示位置而不是打开它,可以设置为“回显”。

请记住,打开预编译的源代码(如Elixir本身)时,该位置可能不存在。

例子

iex> open MyApp
iex> open MyApp.fun/2
iex> open {"path/to/file", 1}

pid(string)

从中创建一个PID string

例子

iex> pid("0.21.32")
#PID<0.21.32>

pid(x, y, z)

创建一个带有3个非负整数的PID,作为参数传递给该函数。

例子

iex> pid(0, 21, 32)
#PID<0.21.32>
iex> pid(0, 64, 2048)
#PID<0.64.2048>

pwd()

打印当前工作目录。

r(module)

重新编译并重新载入给定的module

请注意,module与重新编译和重新加载相同文件中定义的所有模块。

此功能旨在用于开发和调试目的。不要依赖于生产代码。

内存中重新加载

当我们在IEx中重新加载模块时,我们重新编译模块源代码,更新内存中的内容。.beam磁盘中的原始文件(可能是模块的第一个定义来自该文件的文件)完全不会改变。

由于typespecs和docs是从.beam文件中加载的(它们不会随模块加载到内存中,因为它们不需要在内存中),所以在重新加载模块时不会重新加载它们。

recompile()

重新编译当前的Mix应用程序。

例如,此帮助程序仅在IEx以Mix项目启动时才起作用iex -S mix。编译后应用程序不会重新启动,这意味着任何长时间运行的进程可能会崩溃,因为任何更改的模块都将被暂时删除并重新编译,而无需通过正确的代码更改回调。

如果您想重新加载单个模块,请考虑使用r(ModuleName)

此功能旨在用于开发和调试目的。不要依赖于生产代码。

remove_breaks()

从所有模块中删除所有断点和检测。

remove_breaks(模块)

从中删除所有断点和检测module

reset_break(id)

将具有给定id的断点处的挂起停止次数设置为零。

返回:ok是否有这样的断点ID。:not_found除此以外。

请注意,模块在重置时保持“检测状态”。如果您想要从模块中有效地移除所有断点和检测代码,请remove_breaks/1改为使用。

reset_break(module, function, arity)

将给定模块,函数和参数中的挂起停止次数设置为零。

如果模块没有检测到,或者给定的函数没有断点,则它是无操作并返回:not_found。否则它返回:ok

请注意,模块在重置时保持“检测状态”。如果您想要从模块中有效地移除所有断点和检测代码,请remove_breaks/1改为使用。

respawn()

通过启动一个新的shell进程来重新生成当前的shell。

runtime_info()

打印vm /运行时信息,如版本,内存使用情况和统计​​信息。

s(term) (macro)

打印给定模块或给定函数/参数对的规格。

例子

iex> s(Enum)
iex> s(Enum.all?)
iex> s(Enum.all?/2)
iex> s(is_atom)
iex> s(is_atom/1)

t(term) (macro)

打印给定模块或给定函数/参数对的类型。

例子

iex> t(Enum)
@type t() :: Enumerable.t()
@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()

v(n \ -1)

返回n历史中第th个表达式的值。

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

whereami(radius \ 2)

在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

此命令只能在通过手动启动的pry会话IEx.pry/0或通过设置的断点进行IEx.break!/4。在常规IEx会话期间调用此函数将会打印一个错误。

请注意,whereami/1当撬动预编译的源代码时,位置可能不存在,例如Elixir本身。

扫码关注腾讯云开发者

领取腾讯云代金券