【问题标题】:What is Cons()?什么是缺点()?
【发布时间】:2020-05-07 11:18:51
【问题描述】:

链表的 Rust 教程示例是:

enum List {
    Cons(u32, Box<List>),
    Nil
}

Cons() 结构到底是什么? (它是一个结构,对吧?)我在任何地方都找不到任何文档。

【问题讨论】:

  • ConsList 枚举的变体。意思是链表有两种可能的情况 - 一个空列表或一个由 u32~List 组成的头
  • 我了解enum 的工作方式有点像C union,并且我了解~List 如何指向列表中的下一个元素,就像您的教科书单链表一样。我没有看到 Cons() 或确实是什么。该文档只是将其从无处吐出,就好像它已经在文档中之前定义或解释过一样。它只是某种匿名结构吗? “元组结构”必须提前定义:struct Cons(u32, ~List) 并且元组没有名称:(u32, ~List)
  • Cons的定义,它类似于前面教程中给出的Shape枚举的CircleRectangle的情况。正如它所解释的,变量不必是简单的值,Cons 看起来类似于元组结构,尽管它的类型将是封闭的枚举类型(在这种情况下为List)。
  • 啊,我明白了!那会教我混合和匹配我想的教程......发布答案,我会为你打勾
  • @J V,在函数式用语中,这通常称为 sum 类型,因为“List”在这里可以包含 Cons 或 Nil,或者所有变体的总和。

标签: rust


【解决方案1】:

Cons 在 Rust 中没有特殊含义。它只是本教程的作者选择调用该枚举变体的名称。相同的List 可以定义为:

enum List {
    Pair(u32, Box<List>),
    Nil
}

cons 这个名字来自 Lisp 编程语言家族,其中使用对(链表的节点)作为数据结构的基本构建块。这是在 Common Lisp 中创建 1,2,3 列表的一种方法:

(cons 1 (cons 2 (cons 3 nil)))

consconstruct 的简写,Lisp 程序员的意思是分配内存。分配大量内存的程序被称为consing 太多。

来源

【讨论】:

    猜你喜欢
    • 2015-05-25
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2014-01-24
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多