如何在Rust的Newtype模式下获取内部结构体的公开常量?
在Newtype模式下获取内部结构体的公开常量
可行,但需要手动在Newtype的实现块中重新导出并包装内部结构体的常量。
因为MyVersion是独立的新类型,不会自动继承内部Version的关联常量,所以需要显式定义对应的常量,将内部Version的常量实例包裹为MyVersion的实例:
#[derive(PartialEq)] pub struct Version(u32); impl Version { pub const v0: Self = Self(0); pub const v1: Self = Self(1); } #[derive(PartialEq)] pub struct MyVersion(Version); impl MyVersion { // 重新导出并包装内部常量 pub const v0: Self = Self(Version::v0); pub const v1: Self = Self(Version::v1); } fn main() { // 验证是否匹配 assert_eq!(MyVersion::v0, MyVersion(Version::v0)); }
如果内部结构体有大量需要导出的常量,可以通过Rust宏来自动生成这些定义,避免重复代码;若常量数量较少,手动定义会更直观简洁。
内容的提问来源于stack exchange,提问作者Leśny Rumcajs
相关产品推荐
相关产品推荐

