IEx.Helpers
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)
建立一个断点在module
,function
与arity
与给定数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)
建立在一个断点module
,function
并arity
与给定数stops
。
请参阅IEx.break!/4
IEx中有关断点的完整说明。
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/0
or 开头的会话调用IEx.break!/4
。这允许当前执行直到下一个断点,该断点将自动将控制权返回给IEx,而不会请求撬动权限。
如果正在运行的进程终止,则会启动新的IEx会话。
在执行该过程时,用户将不再控制该shell。如果您宁愿创建一个新的shell,请respawn/0
改用它。
exports(module \ Kernel)
打印由给定模块导出的所有函数和宏的列表。
flush()
刷新所有发送到shell的消息并将其打印出来。
h()
打印文档IEx.Helpers
。
h(term) (macro)
打印给定模块或给定函数/参数对的文档。
例子
iex> h(Enum)
它还接受功能的格式fun/arity
和module.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
自定义编辑器通过使用FILE
和LINE
符号来支持。例如,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本身。