如何使用Rust枚举定义类型层次结构?

And*_*uiz 2 rust

我正在尝试在Rust中创建一个编译器,但是我在理解如何使用枚举定义类型层次结构时遇到了问题.我们有例如:

enum Thing {
    Animal,
    Plant,
}

struct Plant {
    color: String,
}

enum Animal {
    Dog,
    Cat,
}

struct Cat {
    name: String,
}

struct Dog {
    name: String,
}

let x = Dog { name: john };
Run Code Online (Sandbox Code Playgroud)

如果我进行模式匹配,会Dog考虑Animal类型(或Thing类型)吗?如何使用枚举和结构创建此类型层次结构?我的类型层次结构有很多层次的深度.

Jmb*_*Jmb 6

当你看这段代码时:

enum Thing {
    Animal,
    Plant,
}

struct Plant {
    color: String,
}
Run Code Online (Sandbox Code Playgroud)

你看到这个词Plant两次.需要注意的重要一点是,两者Plant是不同的,不相关的东西.仅仅因为它们具有相同的名称并不意味着它们代表相同的东西,实际上它们在获取完全限定名称时并不具有相同的名称:第一个是::Thing::Plant第二个,第二个是简单的::Plant.

如果要链接两者,则需要明确说明:

enum Thing {
    Animal(Animal),
    Plant(Plant),
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,您可以查看Rust书中IpAddr示例.