【问题标题】:what is the difference between [string()] and list() in erlang?erlang 中的 [string()] 和 list() 有什么区别?
【发布时间】:2016-08-12 21:47:34
【问题描述】:

Erlang:[string()] 和 list() 有什么区别??

我将它们视为 ct_telnet:cmd 和 ct_ssh:exec 的返回类型?

http://erlang.org/doc/man/ct_ssh.html

exec(SSH, Command, Timeout) -> {ok, Data} | {error, Reason}
Types:
  Data = list()

http://erlang.org/doc/man/ct_telnet.html

cmd(Connection, Cmd, Opts) -> {ok, Data} | {error, Reason}
Types:
  Data = [string()]

【问题讨论】:

    标签: erlang


    【解决方案1】:

    在 Erlang 中正式没有“字符串”这样的类型,但是字符串使用代码列表表示。所以本质上

    String() -> [Positive_Integer()](正整数列表)

    [String()] -> [[Positive_Integer()]] (正整数列表)

    其中 [] 表示一个列表。

    【讨论】:

      【解决方案2】:

      list() 类型代表任何列表,无需指定其元素的类型。另一种写法是[_][term()]

      string()list() 的特例:它是一个包含表示 Unicode 代码点的整数的列表(如果小于 256,则为 Latin-1 字符,如果小于 128,则为 ASCII 字符)。 string() 的另一种写法是list(char())[char()]

      [string()] 是一个字符串列表。这种类型也可以写成list(string())。由于它是列表的一种特殊情况,因此将其写为list() 也是有效的(尽管信息量较少)。

      【讨论】:

      • 感谢您的解释。将两种类型中的任何一种传递给如下函数时是否相同?循环列表([H | L])
      • @seenu9333 这当然取决于函数接受什么。
      • @seenu9333:函数loop_list([H | L]) 接受所有list(X)(或[X] 类型),其中H 应为XT 类型的list(X)
      猜你喜欢
      • 2019-01-08
      • 2016-08-30
      • 1970-01-01
      • 2014-07-22
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多