- 关联常量
关联常量
associated-constants.md
commit 024aa9a345e92aa1926517c4d9b16bd83e74c10d
通过associated_consts功能,你像这样可以定义常量:
#![feature(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时,我们可以增加我们自己的定义。
关联常量并不一定要关联在一个 trait 上。一个struct的impl块或enum也行:
#![feature(associated_consts)]struct Foo;impl Foo {const FOO: u32 = 3;}
