Erlang 为什么';是我的代码发送了双重消息(它发送的是XX而不是X)?
我正在做一个简单的计算器练习。这段代码发送一个数字。然而,当我尝试发送一个数字X时,例如,它发送XX。这是console中的外观:Erlang 为什么';是我的代码发送了双重消息(它发送的是XX而不是X)?,erlang,Erlang,我正在做一个简单的计算器练习。这段代码发送一个数字。然而,当我尝试发送一个数字X时,例如,它发送XX。这是console中的外观: (pz@Molly)3> znamenka:send(0, prva_znamenka). I'm about to send: 00 (pz@Molly)4> 这是一段相关的代码: send(X, Name) -> if X =:= 0 -> Name!X; X =:=
(pz@Molly)3> znamenka:send(0, prva_znamenka).
I'm about to send: 00
(pz@Molly)4>
这是一段相关的代码:
send(X, Name) ->
if
X =:= 0 ->
Name!X;
X =:= 1 ->
Name!X;
X =:= 2 ->
Name!X;
X =:= 3 ->
Name!X;
X =:= 4 ->
Name!X;
X =:= 5 ->
Name!X;
X =:= 6 ->
Name!X;
X =:= 7 ->
Name!X;
X =:= 8 ->
Name!X;
X =:= 9 ->
Name!X;
X =:= stop ->
Name!X;
true ->
io:format("You didn't enter a number or stop.")
end.
loop() ->
receive
stop ->
exit({myExit});
X ->
io:format("I'm about to send: ~w", [X]),
{rjesenje, rjesenje@Molly}!{self(), X},
loop()
end.
你在混合两种东西。首先,程序使用io:format/2函数打印字符串。由于字符串末尾没有新行,因此shell中的光标保持在同一位置。然后函数send(X,Name)返回其值,即if语句的结果,因此消息本身为:0,并在打印提示之前添加新行 这两件事是相互独立的,因此您可能会得到:
0I'm about to send: 0
(pz@Molly)4>
或:
我不能确定订单
如果您对io:format lite进行注释,您将看到一个0剩余,或者如果您向send函数添加新行,如
end,
ok.
第二个0将替换为ok
io:format("I'm about to send: ~w~n", [X]),
你会发现不同之处
io:format("I'm about to send: ~w~n", [X]),