2017-07-12 25 views
1

Wikipedia's list of programming languages with algebraic data types (ADTs)表明Rust确实有ADT,但我不确定我的解释是否对Rust的原因是正确的。据我了解,说一个具有ADT的人都需要有:如何显示Rust类型系统支持代数数据类型(ADT)?

  • 零(或无效) - !拉斯特) - 一个类型,就没有得到价值。
  • 一个(或单元) - ()在Rust中) - 一种获得一个值的类型:()本身。

操作

  • 加法 - enum { A, B }鲁斯特 - 操作,可以返回的A值或B值。
  • 乘法 - Tuple (A, B) Rust - 可以返回所有组合AB的操作。

规则

  • a + b = b + aenum { A, B } =~ enum { B, A }
  • a * b = b * a(A, B) =~ (B, A)
  • 0 + x = xenum { !, A } =~ enum { A }
  • 0 * x = 0(!, A) =~ !
  • 1 * x = x((), A) =~ A

这里A =~ B意味着有一个fn(A) -> Bfn(B) -> A

是我的描述上面为什么锈病的类型系统支持ADT的真实,还是我丢失或误解的东西呢?

+3

'!'实际上并不是稳定的Rust中的类型,但可以使用空的'enum'作为“零”类型。尽管我不认为零类型是语言具有代数数据类型的必要条件。那就是说,你的问题到底是什么? – interjay

+0

我的实际问题在其中一个编辑中被删除。它现在回来了。 –

+1

您的实际问题没有*删除*,它被*移动* - 到帖子的标题,这是问题在问题和答案网站上的位置。一堆名词如“锈的代数数据类型”不是一个合适的问题。你已经修改了标题(同时保留一个问题,所以这很好)。 – Shepmaster

回答

1

我上面的描述是为什么Rust的类型系统支持ADT是真的,还是我错过了或者误解了它的一些东西?

是的,这是对的。我会做的一个改变是将Void表示为enum。作为interjay在评论中说,!不是(yet)稳定的锈的一部分:

enum Void {} // uninhabited 

其余如下容易,我不知道一个答案可以表达它比你在做你自己题。

相关问题