Rust 特征具有由实现定义的常量字段

bey*_*kay 8 traits rust

设置

我希望能够定义一个特征,使得任何实现该特征的结构不仅必须实现函数,而且还必须指定某些常量的值。所以也许是这样的:

trait MyTrait {
    const MY_CONST: u8;
    fn foo();
    fn bar();
}
Run Code Online (Sandbox Code Playgroud)

然后结构看起来像这样:

struct MyFirstStruct {
    const MY_CONST: u8 = 42;
    ...
}
impl MyTrait for MyFirstStruct {
    fn foo() {...}
    fn bar() {...}
}
Run Code Online (Sandbox Code Playgroud)

这样,当我稍后实现 时MySecondStructMyThirdStruct它们可以分别具有不同的值MY_CONST,但每个实例都MyFirstStruct将具有相同的值MY_CONST,并且每个实例MySecondStruct也将具有相同的值MY_CONST(这可能与 的值不同,也可能不不同)MY_CONST为了MyFirstStruct

这可能吗?

我尝试过的

我已经尝试了在块中指定常量的各种组合impl MyTrait for MyFirstStruct,在块中指定它struct MyFirstTrait,但似乎无法弄清楚。

在线搜索似乎总是落在 rust book (它没有描述这样的东西)、rust by example高级特征 rust book Chapter这个关于特征的网页上,其中有一个关于特征常量的令人沮丧的小部分,这似乎暗示这是可能的,也许。

我考虑过使用函数定义,例如getMY_CONST()将其实现为仅 return MY_CONST,但这似乎是一个丑陋的黑客,如果可能的话我宁愿避免。

如果这是不可能的,那么可以使用其他方法来完成这项工作,我仍然在开始 Rust 冒险:)。

Sve*_*ach 16

特征可以具有关联的常量,并且特征定义中的语法与您所猜测的完全一样。不过,为特定特征设置值是特征实现的一部分,而不是结构定义的一部分。

trait MyTrait {
    const MY_CONST: u8;
    fn foo();
    fn bar();
}

struct MyFirstStruct;

impl MyTrait for MyFirstStruct {
    const MY_CONST: u8 = 42;
    fn foo() {}
    fn bar() {}
}
Run Code Online (Sandbox Code Playgroud)