2014-10-17 44 views
2

尝试通过理解生成列表,并在某些时候开始看到奇怪的字符串。无法在这一点来解释他们的存在(猜测逃逸字符是ASCII码 - 但为什么?):Erlang:生成列表中的奇怪字符

45> [[round(math:pow(X,2))] ++ [Y]|| X <- lists:seq(5,10), Y <- lists:seq(5,10)].          
[[25,5], 
[25,6], 
[25,7], 
[25,8], 
[25,9], 
[25,10], 
[36,5], 
[36,6], 
[36,7], 
"$\b","$\t","$\n", 
[49,5], 
[49,6], 
[49,7], 
"1\b","1\t","1\n", 
[64,5], 
[64,6], 
[64,7], 
"@\b","@\t","@\n", 
[81,5], 
[81,6], 
[81,7], 
"Q\b", 
[...]|...] 
+0

请参阅[这个问题](http://stackoverflow.com/questions/7371955/erlang-lists-with-single-numbers-over-8?lq=1),[this question](http:// stackoverflow .com/questions/25978873/avoid-converting-numbers-to-characters-in-erlang)and [this question](http://stackoverflow.com/questions/2348087/can-i-disable-printing-lists-of - 小 - 整数,如串合二郎壳)。 – legoscia 2014-10-17 13:31:33

回答

5

在Erlang中所有的字符串都是小整数的只是列表(像在C字符)。而shell可以帮助你解决任何列表可打印字符串的问题。所以你得到的是数字,他们只是以你不会期望的方式打印。

如果你想改变这个行为,你可以看看this answer

+0

那么这就是问题所在,因为更改全局变量会影响字符串实际打印的方式。但为什么只能逃脱和控制字符选择和其他数字显示为数字而不是字符。 – rks 2014-10-17 17:56:37

+0

不过,你只会改变shell正在打印返回值的方式;所有'io:formats'都会保持不变。关于其他数字,shell仅将其视为基于[ASCII表](http://www.asciitable.com/)的“可打印整数”的字符串列表。所以'[104,101,108,108,111]'会变成'“你好”。在你的对中,你也可以看到36被改为'$',49改为'1'。而一些像7,8,9这样的低数字会变成钟形,标签和新线。几乎所有从0到32的其他人都没有“可打印”表示。 – mpm 2014-10-17 20:02:41