Erlang打印PID作为结果

vktxenjb  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(152)

下面是我的代码:

-module(cooperate).
-compile(export_all).

producer(_Pid, 0) ->
    done;
producer(Pid, N) -> 
    io:format("process ~p producing ~p~n", [Pid, rand:uniform(N)]),
    producer(Pid, N-1).

start() ->
    spawn(cooperate, producer, [rand:uniform(7), 7]).

Results:
{ok,cooperate}
2> cooperate:start().
process 2 producing 6
<0.88.0>
process 2 producing 3
process 2 producing 4
process 2 producing 4
process 2 producing 1
process 2 producing 2
process 2 producing 1
3> 

Expecting:
process <0.88.0> producing 6
process <0.88.0> producing 3
process <0.88.0> producing 4
process <0.88.0> producing 4
process <0.88.0> producing 1
process <0.88.0> producing 2
process <0.88.0> producing 1

如果我想在<0.88.0>处理和生产之间打印而不是2之间,我该怎么办?我尝试了pid_to_list、~p等

s8vozzvw

s8vozzvw1#

生成器函数的第一个参数名为Pid,但您从未将任何pid作为该函数的第一个参数传递。第一次调用该函数时的argumenr为兰德:uniform(7),在您的测试中,它恰好返回2。
如果你想让你的函数打印你所产生的进程的pid,最好的方法是去掉第一个参数,而使用self()。

相关问题