设置
我希望能够定义一个特征,使得任何实现该特征的结构不仅必须实现函数,而且还必须为某些常量指定值。所以也许是这样的:
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() {...}
}
这样当我稍后实现 MySecondStruct
、MyThirdStruct
时,它们每个都可以有不同的 MY_CONST
值,但是 的每个实例MyFirstStruct
将具有与 MY_CONST
相同的值,并且 MySecondStruct
的每个实例也将具有相同的 MY_CONST
值(这可能或者可能与 MyFirstStruct
的 MY_CONST
的值不同)
这可能吗?
我尝试过的
我已经尝试了在 impl MyTrait for MyFirstStruct
block 中指定常量的各种组合,在 struct MyFirstTrait
block 中指定它,但似乎无法确定出来。
网上搜索好像总是在rust book上(没有这样描述),rust by example , the advanced traits rust book chapter , 或 this webpage on traits其中有一个关于 Trait 常量的令人沮丧的小部分,这似乎暗示这是可能的,也许吧。
我考虑过使用像 getMY_CONST()
这样的函数定义,它被实现后只返回 MY_CONST
,但这似乎是一个丑陋的 hack,我宁愿尽可能避免。
如果这是不可能的,那么其他使这项工作可行的方法将受到赞赏,我仍在开始 Rust 冒险 :)。
最佳答案
性状可以有 associated constants ,并且特征定义中的语法与您猜测的完全一样。不过,为特定特征设置值是特征实现的一部分,而不是结构定义的一部分。
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() {}
}
关于具有由实现定义的常量字段的 Rust 特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70123005/