通过associated_consts功能,你像这样可以定义常量:
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,不定义的话:
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时,我们可以增加我们自己的定义。
i32
i64
关联常量并不一定要关联在一个 trait 上。一个struct的impl块或enum也行:
struct
impl
enum
#![feature(associated_consts)] struct Foo; impl Foo { const FOO: u32 = 3; }
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8