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 - 可以返回所有组合A
和B
的操作。
规则:
a + b = b + a
:enum { A, B } =~ enum { B, A }
a * b = b * a
:(A, B) =~ (B, A)
0 + x = x
:enum { !, A } =~ enum { A }
0 * x = 0
:(!, A) =~ !
1 * x = x
:((), A) =~ A
这里A =~ B
意味着有一个fn(A) -> B
和fn(B) -> A
是我的描述上面为什么锈病的类型系统支持ADT的真实,还是我丢失或误解的东西呢?
'!'实际上并不是稳定的Rust中的类型,但可以使用空的'enum'作为“零”类型。尽管我不认为零类型是语言具有代数数据类型的必要条件。那就是说,你的问题到底是什么? – interjay
我的实际问题在其中一个编辑中被删除。它现在回来了。 –
您的实际问题没有*删除*,它被*移动* - 到帖子的标题,这是问题在问题和答案网站上的位置。一堆名词如“锈的代数数据类型”不是一个合适的问题。你已经修改了标题(同时保留一个问题,所以这很好)。 – Shepmaster