gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:55:42 30 4
gpt4 key购买 nike

设置

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

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 值(这可能或者可能与 MyFirstStructMY_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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com