【问题标题】:Creating a fake or dummy pid in elixir在 elixir 中创建一个假的或虚拟的 pid
【发布时间】:2015-12-25 10:23:28
【问题描述】:

在 erlang 中,可以创建一个不对应于进程的 pid。可以在 Learn You Some Erlang 中找到使用此功能的示例 here

pid(0,250,0).

有没有办法在长生不老药中做同样的事情? 我目前的关闭是创建一个立即终止并使用该 pid 的进程。

fake_pid = Process.spawn(fn -> end)

这个接缝有点像 hack,我不确定从未创建的 pid 和死的 pid 之间是否存在细微差别。

【问题讨论】:

  • 创建一个假的 pid 的问题是你不能确定它不是指一个实际的进程。您可能会创建一个,然后立即检查该 pid 标识的任何进程是否处于活动状态,但即使当时没有进程,稍后也可能会出现一个确实具有该 pid 的进程。为什么你需要一个假的pid?你真正想要完成什么?
  • 我正在测试一个以 pid 作为参数的函数。对于其他参数的某些组合,不使用 pid。所以我只需要一个 pid 来通过警卫检查,但不需要引用任何东西

标签: process pid elixir


【解决方案1】:

可以使用pid/3 Erlang函数directly in Elixir

:c.pid(0,250,0)

另外 - 不是来自 Erlang 文档:

将 X、Y、Z 转换为 pid 。该函数只能在调试时使用。

【讨论】:

  • :c 模块是什么?
  • 来自 Erlang 文档:“c 模块使用户能够输入一些常用命令的缩写形式。”
【解决方案2】:

出于您的目的,我将使用测试代码中的self()。这将解决运行当前测试用例的进程。

如果您出于某种原因需要测试另一个 pid,您使用 Process.spawn/1 的方式非常好,因为它确保 pid 不被占用(并且不指向系统中的重要内容)并且它是已经死了(或者还活着,如果你在测试期间让它活着的话)。

Erlang :c.pid/3 或新的 Elixir 1.1 IEx.Helpers.pid/3 只是为了方便在 shell 中使用的函数。

【讨论】:

    猜你喜欢
    • 2014-05-17
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多