6.10.关联常量
最后更新于:2022-04-01 00:45:12
通过`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;
}
~~~