Che*_*evy 10 algebraic-data-types rust
维基百科的具有代数数据类型 (ADT) 的编程语言列表表明 Rust 确实具有 ADT,但我不确定我对 Rust 为何如此的解释是否正确。据我了解,要说一个人拥有 ADT,需要具备:
价值观:
!在 Rust 中) - 没有值的类型。()在 Rust 中)——一种获得一个值的类型:()它本身。运营:
enum { A, B }运算可以返回 的值A或 的值B。(A, B)的所有组合的运算。AB规则:
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) -> Bandfn(B) -> A
我上面关于为什么 Rust 的类型系统支持 ADT 的描述是正确的,还是我遗漏或误解了一些内容?
我上面关于为什么 Rust 的类型系统支持 ADT 的描述是正确的,还是我遗漏或误解了一些内容?
是的,这大约是正确的。我要做的一项更改是将Void其表达为enum. 正如 interjay 在评论中所说,还不!是稳定 Rust 的一部分:
enum Void {} // uninhabited
Run Code Online (Sandbox Code Playgroud)
其余的很容易理解,我不确定答案是否能比你在问题中所做的更好地表达它。