将 Elixir 中的进程 ID (`pid`) 转换为元组或字符串;将 pid 解析为其他类型

Dog*_*Dog 1 elixir

如何将进程 ID 转换PID为元组或字符串?

例如,假设我有一个名为my_pid

iex(1)> my_pid
#PID<0.1692.0>
Run Code Online (Sandbox Code Playgroud)

我如何将 PID ID 转换为元组或字符串以获得其中之一?

{ 0, 1692, 0 }
Run Code Online (Sandbox Code Playgroud)

或者

"0.1692.0"
Run Code Online (Sandbox Code Playgroud)

Ale*_*kin 11

你追求的是:erlang.pid_to_list/1功能:erlang.list_to_pid/1

\n
list = self() |> :erlang.pid_to_list()\n#\xe2\x87\x92\xc2\xa0[60, 48, 46, 49, 49, 48, 46, 48, 62]\nto_string(list)\n#\xe2\x87\x92\xc2\xa0"<0.110.0>"\nlist |> List.delete_at(0) |> List.delete_at(-1) |> to_string()\n#\xe2\x87\x92\xc2\xa0"0.110.0"\n
Run Code Online (Sandbox Code Playgroud)\n

这种方式的优点是\xe2\x80\x99s可转换

\n
:erlang.list_to_pid(list)\n#\xe2\x87\x92\xc2\xa0#PID<0.110.0>\n
Run Code Online (Sandbox Code Playgroud)\n

  • Aleksei - 感谢(一如既往)带来简洁和优雅 - 是的,我的答案太老套了! (2认同)

Gav*_*aff 6

一步步:

pid = self()         # gets shells pid e.g. #PID<0.105.0>

a = "#{inspect pid}" # gives the string "#PID<0.105.0>"

b = String.slice a, 5,100 # remove the prefix #PID<
c = String.trim b, ">"    # remove the postfix >
d = String.split c, "."   # create list of strings: ["0", "105", "0"]

e = Enum.map( d ,fn x -> String.to_integer(x) end) # converts to a list of integers
f = Enum.join(e, " ")
Run Code Online (Sandbox Code Playgroud)

结果:"0 105 0"