【问题标题】:Erlang lists with single numbers over 8?Erlang列表的单个数字超过8?
【发布时间】:2011-11-14 09:02:58
【问题描述】:

以某种奇怪的方式,列表中8 上的所有数字都变成了某种 ASCII?

[8] -> ["\b"]

请帮我解决这个问题:)

【问题讨论】:

标签: list erlang


【解决方案1】:

使用~w 而不是~p 打印它,您的问题应该会消失。

~p 尝试将列表中的元素解释为 ASCII。 ~w 没有。

【讨论】:

    【解决方案2】:

    来自文档:http://www.erlang.org/doc/reference_manual/data_types.html

    2.11 字符串

    字符串用双引号 (") 括起来,但不是 Erlang 中的数据类型。相反,字符串 "hello" 是列表 [$h,$e,$l,$l,$o] 的简写,即 [104,101,108,108,111]。

    两个相邻的字符串文字连接成一个。这是在编译时完成的,不会产生任何运行时开销。示例:

    “字符串”“42”

    等价于

    “字符串42”

    【讨论】:

      【解决方案3】:

      String 不是 Erlang 中的数据类型,它只是一个整数列表。但是如果可能,Erlang shell 会尝试将列表显示为字符串:

      1> S = [65, 66, 67, 68, 69, 70].
      "ABCDEF"
      2> S = "ABCDEF".
      "ABCDEF"
      3> io:write(S).
      [65,66,67,68,69,70]ok
      4> [65, 66].
      "AB"
      5> [65, 66, 1].
      [65,66,1]
      

      【讨论】:

      • 但是有什么办法可以解决吗?所以它返回列表中的数字而不是“字符串”??
      • 其实不是bug,是特性。您始终可以使用 io:write/1 按原样打印列表。您还可以使用 shell_default 或 user_default 模块为 io:write/1 定义更短的别名:erlang.org/doc/man/shell_default.html
      猜你喜欢
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多