ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
通过`associated_consts`功能,你像这样可以定义常量: ~~~ trait Foo { const ID: i32; } impl Foo for i32 { const ID: i32 = 1; } fn main() { assert_eq!(1, i32::ID); } ~~~ 任何`Foo`的定义都必须定义`ID`,不定义的话: ~~~ #![feature(associated_consts)] trait Foo { const ID: i32; } impl Foo for i32 { } ~~~ 会给出 ~~~ error: not all trait items implemented, missing: `ID` [E0046] impl Foo for i32 { } ~~~ 实现也可以定义一个默认值: ~~~ #![feature(associated_consts)] trait Foo { const ID: i32 = 1; } impl Foo for i32 { } impl Foo for i64 { const ID: i32 = 5; } fn main() { assert_eq!(1, i32::ID); assert_eq!(5, i64::ID); } ~~~ 如你所见,当实现`Foo`时,你可以不实现它(关联常量),当作为`i32`时。接着它将会使用默认值。不过,作为`i64`时,我们可以增加我们自己的定义。 关联常量并不一定要关联在一个特性上。一个`struct`的`impl`也行: ~~~ #![feature(associated_consts)] struct Foo; impl Foo { pub const FOO: u32 = 3; } ~~~