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

Rust traits with constant field defined by implementation

设置

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

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

然后结构看起来像:

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

这样当我稍后实现 MySecondStructMyThirdStruct 时,它们每个 MY_CONST 可以有不同的值,但是 MyFirstStruct 的每个实例都将具有相同的值MY_CONST,并且 MySecondStruct 的每个实例也将具有相同的 MY_CONST 值(对于 [=15=,它可能与 MY_CONST 的值不同,也可能不同])

这可能吗?

我试过的

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

在线搜索似乎总是落在 rust book 上(它没有描述类似的东西),rust by example, the advanced traits rust book chapter, or this webpage on traits 其中有一个令人沮丧的小部分关于 Trait 常量,这似乎暗示这是可能的,也许.

我考虑过使用像 getMY_CONST() 这样的函数定义,它只会实现 return MY_CONST,但这似乎是一个我宁愿避免的丑陋 hack可能。

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

Traits可以有associated constants,trait定义中的语法和你猜的一模一样。但是,为特定特征设置值是特征实现的一部分,而不是结构定义的一部分。

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() {}
}