下面是我的代码:
-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等
1条答案
按热度按时间s8vozzvw1#
生成器函数的第一个参数名为Pid,但您从未将任何pid作为该函数的第一个参数传递。第一次调用该函数时的argumenr为兰德:uniform(7),在您的测试中,它恰好返回2。
如果你想让你的函数打印你所产生的进程的pid,最好的方法是去掉第一个参数,而使用self()。