我正在尝试用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 };如果我做模式匹配,Dog会被认为是Animal类型(或Thing类型)吗?如何使用枚举和结构创建此类型层次结构?我的类型层次结构有很多层次的深度。
发布于 2018-09-21 14:37:22
当你看这段代码的时候:
enum Thing {
Animal,
Plant,
}
struct Plant {
color: String,
}您会看到单词Plant两次。需要注意的重要一点是,这两个Plant__s是不同的、不相关的东西。仅仅因为它们具有相同的名称并不意味着它们代表相同的事物,事实上,当您采用完全限定名时,它们实际上并不具有相同的名称:第一个名称是::Thing::Plant,第二个名称只是纯::Plant。
如果要将两者链接起来,则需要使用以下命令明确表示:
enum Thing {
Animal(Animal),
Plant(Plant),
}有关更多详细信息,您可以查看the Rust book中的IpAddr示例。
https://stackoverflow.com/questions/52434518
复制相似问题