我需要获取IO.puts或IO.inspect的行号或elixir控制台上出现的任何其他类型的输出以进行调试.这是否有内置功能?或者有没有其他简单的方法来实现相同的目标?
PS:IO.puts的行号,我的意思是在代码中写入IO.puts的行.
我正在尝试增加IEx.pry会话的超时时间。具体来说,我在Phoenix框架单元测试中试探。我在测试正文中添加了以下内容:
require IEx
IEx.pry
Run Code Online (Sandbox Code Playgroud)
我查看了该pry方法的IEx文档,它说第一个参数是以毫秒为单位的超时时间。但是,当我将撬叫更新为:
IEx.pry(60000)
Run Code Online (Sandbox Code Playgroud)
...它仍然会在30秒后超时。如何增加此超时时间?
为了后代的缘故,在Elixir 1.1中,您可以--trace在测试命令上使用该标志,并且将使用超时无限。例如:
$ iex -S mix test test/models/user_test.exs:37 --trace
Run Code Online (Sandbox Code Playgroud) 我昨天刚开始学习长生不老药.我有一个文件User.exs.它看起来像这样:
defmodule User do
@moduledoc """
Defines the user struct and functions to handle users.
"""
# functions and stuff go here...
end
Run Code Online (Sandbox Code Playgroud)
当我运行时iex,这是当我尝试查看文档时发生的情况:
iex(1)> c "user.exs"
[User]
iex(2)> h User
User was not compiled with docs
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我是Elixir的新手,我开始阅读Dave Thomas的优秀编程Elixir.我很好奇我可以在多大程度上采用"pmap"函数的并发性,所以我迭代地将项目数量从1,000增加到10,000,000.出于好奇,我观察了输出,htop正如我所做的那样,通常会出现类似于下图所示的CPU使用率:
在显示书中的例子后,戴夫说:
而且,是的,我刚刚启动了1,000个后台进程,并且我在我的机器上使用了所有内核和处理器.
我的问题是,为什么我的机器上只有核心1,3,5和7点亮了?我的猜测是,它与我的iex流程只是一个操作系统级别的流程有关,OSX正在管理该流程的范围.那是怎么回事?有没有办法确保所有内核都用于执行性能密集型任务?
我不明白Elixir中的等号到底是什么意思。尚不清楚的是,它看起来像是分配和模式匹配操作之间的混合。
iex(1)> x=4
4
iex(2)> y=5
5
iex(3)> 3=y
** (MatchError) no match of right hand side value: 5
iex(3)> y=3
3
iex(4)> y=x
4
Run Code Online (Sandbox Code Playgroud)
我了解在Elixir中,等于运算符的意思是将=符号的左侧与右侧匹配。前两行对我来说很有意义。x和y是未绑定的变量,因此它们可以匹配任何内容。它们在匹配时受到约束。因此,我了解第三行。您不能将3与5相匹配。
我开始放松的地方是为什么在没有给出相同错误的情况下执行最后两行。看起来等号又回到了仅作为赋值运算符的地步。
在没有充分理解的情况下,我尝试将这种行为视为事实,并尝试进一步学习该语言。但是由于模式匹配是Elixir的核心机制之一,因此我不断锁定并感到应该回到最初的问题。在我完全理解“ =”符号的确切含义以及逻辑之后,我将不做任何进一步的介绍。
如果我IEx以下列方式启动会话,则cookie设置正确.
$ iex --name example@10.10.10.2 --cookie mycookie -S mix
...
iex(example@10.10.10.2)1> :erlang.get_cookie
:mycookie
Run Code Online (Sandbox Code Playgroud)
但是,如果我也设置了erlang参数来使用我的sys.config文件,那么cookie就没有正确设置.
$ iex --name example@10.10.10.2 --cookie mycookie --erl "config sys.config" -S mix
...
iex(example@10.10.10.2)1> :erlang.get_cookie
:USLOPZLYUPUYMEGXBMJQ
Run Code Online (Sandbox Code Playgroud)
如何将配置和cookie都设置为命令行参数?
请100_000在Iex中默认启用千位数分组(例如).如果是的话真的很有帮助.
否则我们如何指定它IO.puts?
在重启iex过程之间,在我的机器上,为什么它的pid总是一样的?
iex> self
#PID<0.81.0>
iex>
^C
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
(v)ersion (k)ill (D)b-tables (d)istribution
Run Code Online (Sandbox Code Playgroud)
再次
iex> self
#PID<0.81.0>
Run Code Online (Sandbox Code Playgroud)
为什么pid价值总是#PID<0.81.0>?
我在远程计算机上,它上面有一个正在运行的Erlang VM节点.我正在尝试连接到Erlang VM节点,iex但收到错误:
$ iex --name testing@127.0.0.1 --remsh myapp@127.0.0.1 --setcookie NMFJGSU0FwvGKlrqMuGfY1I6LtgSz1Rn2PLiDnqMS54
Erlang/OTP 18 [erts-7.3.1] [source] [64-bit] [async-threads:10] [kernel-poll:false]
Could not contact remote node myapp@127.0.0.1, reason: :nodedown. Aborting...
$
Run Code Online (Sandbox Code Playgroud)
epmd -names 报告Erlang VM节点正在运行:
$ epmd -names
epmd: up and running on port 4369 with data:
name myapp at port 45671
$
Run Code Online (Sandbox Code Playgroud)
以下vm.args是已部署应用的内容:
-name myapp@127.0.0.1
-setcookie NMFJGSU0FwvGKlrqMuGfY1I6LtgSz1Rn2PLiDnqMS54=
-smp auto
Run Code Online (Sandbox Code Playgroud)
问题:我做错了什么?
通过混合在iex会话中运行凤凰服务器,如:
iex -S mix phx.server
Run Code Online (Sandbox Code Playgroud)
有时候会列出一些警告:
Compiling 1 file (.ex)
warning: variable "user" is unused
lib/app_web/controllers/user_controller.ex:37
Run Code Online (Sandbox Code Playgroud)
但似乎只是第一次运行服务器,之后我认为它是缓存的,所以它没有显示出来.我怎么能在以后看到这些警告来修复它们?谢谢.
elixir ×10
iex ×10
erlang ×3
concurrency ×1
elixir-mix ×1
equals ×1
erlang-otp ×1
formatting ×1
performance ×1
pmap ×1