Elixir交互式Shell: 1. 运行时系统标记
Elixir交互式Shell: 2. 常用命令
Elixir交互式Shell: 3. 创建本地和远程Shell
Elixir交互式Shell: 4. 处理文件和脚本
Elixir交互式Shell: 5. 配置IEx
这是
IEx系列
五部分中的第四部分, 在这一部分中, 我们将说明如何设置在IEx中处理文件和脚本
导入文件
输入h import_file
查看文档
iex(remote@localhost)2> h import_file
Evaluates the contents of the file at path as if it were directly typed into the shell.
...
import_file
的作用是, 对导入的文件进行求值, 就像直接在shell中输入一样, 和复制一个文件的内容并粘贴到IEx Shell
中的效果一模一样
本地变量
有如下test1.exs
文件:
fred = :fred
defmodule Hello do
def foo do
"This is foo"
end
end
IO.puts fred
iex(1)> import_file "test1.exs"
fred
:ok
iex(2)> fred
:fred
iex(3)> Hello.foo
"This is foo"
iex(4)>
因为import_file
是在IEx 导入的上下文进行求值
test2.exs
fred = :fred
defmodule Hello do
def foo do
"This is foo"
end
end
x10 = x * 10
# 现在 `x` 还没有定义
定义x
, 并导入test2.exs
iex(1)> x = 5
5
iex(2)> import_file
import_file/2
iex(2)> import_file "test2.exs"
50
iex(3)> x10
50
我们看到 x10 = x * 10
的到了正确的结果 50
IEX -S
搜索
iex -s mix - 如果在一个
mix
项目中, 查找本地mix.exs
否则
文件名必须包括扩展名
文件必须可执行
文件必须在路径中, 除非提供绝对路径
IEx.pry
IEx.pry
给我们提供了一个调试Elixir代码的能力. 我们能够在访问 IEx.pry
插入位置的作用域内的变量值. IEx.pry
让IEx进入了IEx.pry
插入位置的作用域
, 因此该作用域外部的变量, 在IEx中不能再访问了, 下面的例子说明了IEx.pry
是如何工作的.
首先创建一个pry.exs
文件
cat > pry.exs <<EOF
require IEx
fred = :fred
defmodule Hello do
def foo do
x = 5
IEx.pry
IO.puts "x is #{x}"
end
end
EOF
iex(1)> bar = :bar
:bar
iex(2)> import_file "pry.exs"
{:module, Hello,
<<70, 79, 82, 49, 0, 0, 15, 24, 66, 69, 65, 77, 69, 120, 68, 99, 0, 0, 0, 126, 131, 104, 2, 100, 0, 14, 101, 108, 105, 120, 105, 114, 95, 100, 111, 99, 115, 95, 118, 49, 108, 0, 0, 0, 4, 104, 2, ...>>,
{:foo, 0}}
iex(3)> bar
:bar
iex(4)> fred
:fred
iex(5)> Hello.foo # 进入函数作用域
Request to pry #PID<0.62.0> at iex:7
Allow? [Yn] Y
Interactive Elixir (1.2.1) - press Ctrl+C to exit (type h() ENTER for help)
pry(1)> bar # 函数外部的变量不再可用
** (UndefinedFunctionError) undefined function :erl_eval.bar/0
pry(1)> fred
** (UndefinedFunctionError) undefined function :erl_eval.fred/0
pry(1)> x # 显示foo函数作用域中的x值
5
pry(2)> x = 4
4
pry(3)> respawn # 结束`IEx.pry`会话返回上层IEx Shell
Interactive Elixir (1.2.1) - press Ctrl+C to exit (type h() ENTER for help)
x is 5 # 执行`IEx.pry`插入点后的代码, x的值没发生编号
:ok
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。