我有一个长生不老药游戏,可以在STDOUT上打印一个“木板”,我想在打印下一个木板之前清除屏幕。我检查了elixir documentation,我认为这就像调用System.cmd("clear", [])
一样容易,但这似乎并不能解决问题:
iex(1)> System.cmd("clear", [])
{"\e[H\e[2J", 0}
似乎返回了一些转义字符,但我不确定这意味着什么。我的问题是
System.cmd("clear", [])
为什么不起作用?还是我期望它应该清除屏幕错误(以及为什么)?显然,iex具有便捷功能
clear
,以清除在iex中可用的屏幕。我发现此帮助程序方法来自IEx.Helpers
模块,并且现在可以运行IEx.Helpers.clear
并清除屏幕,然后再打印另一块板。 最佳答案
就像您提到的,清除屏幕的最佳方法是调用clear helper:
IEx.Helpers.clear
要回答您的另一个问题,这是因为
System.cmd
命令实际上并没有在控制台上打印任何内容,而是将其返回了(因此Elixir应用程序可以对其执行某些操作)。返回的字符串(\e[H\e[2J
)由两个ANSI转义码组成,分别对应于“回家”(\e[H
)和“清除”(\e[2J
)。您可以自己测试。调用此命令将清除屏幕(并返回
:ok
):IO.puts("\e[H\e[2J")
有趣的旁注:IEx clear helper之所以不返回
:ok
的原因,是因为它在末尾调用了special function。关于elixir - Elixir在macOS上使用System运行“clear”命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53037717/