我正在Erlang中构建一个简单的tic tac toe程序。我将电路板作为字符串传递给io:format("123\n456\n789\n")
,并希望看到:
123
456
789
但是在Erlang shell中io:format("123\n456\n789\n")
打印出来:
123
456
789
ok
有没有办法输出到控制台而没有尾随确定?
答案 0 :(得分:6)
ok
可以告诉您通话有效。函数io:format的规范指定了这一点。
这里真正的问题是你看到了erlang终端的混合,以及来自stdout的任何东西 - stdout正在打印数字,而erlang终端正在回馈ok
。
如果您使用escript编写脚本,那么ok策略将不会打印到标准输出 - 您应该只将控制台视为交互式解释器。
作为旁注,最简单的输出方式是:
123
456
789
将是
1> 123. 456. 789.
123
456
789
答案 1 :(得分:4)
它是shell,它打印最后ok
个原子。试试这个:
erl -noshell -eval 'io:format("123\n456\n789\n"),init:stop()'
答案 2 :(得分:1)
Erlang shell是一个REPL,一个读取/评估/打印循环。它读取一个键入的表达式,对其进行求值,打印结果并循环以读取表达式。需要记住的重要一点是,您输入的表达式始终返回值,而shell 始终打印值。你不能不回报价值!
因此,当您输入io:format("123\n456\n789\n").
时,shell会计算表达式并打印结果。评估对io:format
的调用会导致打印出字符串,并且调用将返回shell打印出的值ok
。因此你得到
123
456
789
ok
shell再次打印表达式返回的值。如果从另一个函数中调用io:format
,则其返回值通常不会返回给shell,shell也不会将其打印出来。
请注意,返回值并打印某些内容是两件完全不同的事情。
答案 3 :(得分:-1)
这是一种解决方法(It's just for fun:)
):
> spawn(fun() -> timer:sleep(1000), io:format("123\n456\n789\n") end).
<0.77.0>
123
456
789