我正在为练习做一个简单的计算器。这段代码发送一个数字。但是,当我尝试发送数字X时,它会发送XX。这就是它在控制台中的样子:
(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.
答案 0 :(得分:2)
你混合了2件事。首先,程序使用io:format / 2函数打印字符串。由于字符串末尾没有新行,因此shell中的光标停留在同一位置。然后函数send(X,Name)返回它的值,即if语句的结果,所以消息本身:0并在打印提示符之前添加一行。
这两件事是独立的,所以你可能会得到:
0I'm about to send: 0
(pz@Molly)4>
或:
0
I'm about to send: 0(pz@Molly)4>
我不确定订单。
如果您对io:format lite进行评论,您将看到剩余的一个0,或者如果您向发送函数添加新行,例如
end,
ok.
第二个0将被ok替换。
答案 1 :(得分:0)
io:format("I'm about to send: ~w~n", [X]),
你会发现差异。