【问题标题】:Erlang: Strange chars in a generated listErlang:生成列表中的奇怪字符
【发布时间】:2014-12-13 01:28:46
【问题描述】:

尝试通过理解生成一个列表,但在某些时候我开始看到奇怪的字符串。此时无法解释它们的存在(猜测转义字符是 ASCII 码 - 但为什么?):

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",
 [...]|...]

【问题讨论】:

标签: erlang list-comprehension


【解决方案1】:

在 Erlang 中,所有字符串都只是小整数的列表(就像 C 中的字符)。并帮助您尝试将任何列表解释为可打印字符串的 shell。所以你得到的是数字,它们只是以你意想不到的方式打印出来的。

如果您想更改此行为,可以查看this answer。

【讨论】:

  • 这就是问题所在,因为更改全局变量会影响字符串的实际打印方式。但是为什么只选择转义和控制字符而其他数字显示为数字而不是字符。
  • 不过,您只能更改 shell 打印返回值的方式;所有io:formats 都将保持不变。关于其他数字,shell 仅将基于ASCII table 的“可打印整数”视为字符串列表。所以[104,101,108,108,111] 会变成"hello"。在您的配对中,您还可以看到 36 更改为 $ 和 49 更改为 1。并且一些小数字如 7、8、9 被更改为 bell、tab 和 new line。几乎所有其他从 0 到 32 都没有“可打印”表示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多