将泛型参数与 impl 中的关联类型相匹配

2024-01-10

我有一个具有关联类型和通用结构的特征::

trait Generator {
    type Foo;
    fn generate(&self) -> Self::Foo;
}

struct Baz<A, B>
where
    A: Generator,
{
    generator: A, // will be some struct implementing Generator, but the exact type will vary
    vec: Vec<B>,  // Each element will be A::Foo
}

我想要generate并将其放入我的向量中:

impl<A: Generator, B> Baz<A, B> {
    fn addFoo(&mut self) {
        self.vec.push(self.generator.generate());
    }
}

呃-哦!编译错误:

error[E0308]: mismatched types
  --> src/main.rs:16:27
   |
16 |             self.vec.push(self.generator.generate());
   |                           ^^^^^^^^^^^^^^^^^^^^^^^^^ expected type parameter, found associated type
   |
   = note: expected type `B`
              found type `<A as Generator>::Foo`

公平地说,我必须向编译器解释一下B是相同的A::Foo;让我们尝试一下where:

impl<A: Generator, B> Baz<A, B>
where
    A::Foo = B,
{

这没有帮助:

error: equality constraints are not yet supported in where clauses (#20041)
  --> src/main.rs:16:5
   |
16 |     A::Foo = B,
   |     ^^^^^^^^^^

嗯,没有平等。也许我可以用冒号运算符来做到这一点?

impl<A: Generator, B> Baz<A, B>
where
    B: A::Foo,
{
error[E0405]: cannot find trait `Foo` in `A`
  --> src/main.rs:16:11
   |
16 |     B: A::Foo,
   |           ^^^ not found in `A`

不,现在它在抱怨A。也许我应该说Generator?

impl<A: Generator, B> Baz<A, B>
where
    B: Generator::Foo,
{
error[E0404]: expected trait, found associated type `Generator::Foo`
  --> src/main.rs:16:8
   |
16 |     B: Generator::Foo,
   |        ^^^^^^^^^^^^^^ not a trait

干得好,编译器——它是not一个特质;它是一个关联类型,但这并没有告诉我如何编写与其匹配的 where 子句。


我必须向编译器解释B是相同的A::Foo

它有一个特殊的语法:

impl<A, B> Baz<A, B>
where
    A: Generator<Foo = B>,
{
    fn add_foo(&mut self) {
        self.vec.push(self.generator.generate());
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将泛型参数与 impl 中的关联类型相匹配 的相关文章

随机推荐

  • java - 来自另一个目录的类的初始包

    我有一些问题如何从另一个目录的类文件初始化包 File file new File D java myproject Name pack time MyClass class URL cp new File file getParent t
  • 如何在visionOS中旋转ModelEntity?

    当将模型加载为 Model3D 对象时 您可以添加手势修改器 如下所示 Model3D named model name bundle realityKitContentBundle model in model resizable asp
  • Ionic 2:无法调试在Android设备上运行的应用程序

    重现步骤 1 创建新项目https github com driftyco ionic starter super https github com driftyco ionic starter super2 运行 ionic run an
  • PySide:如何放大QTableWidget中的图像?

    我在使用 PySide QTableWidget 时遇到问题 我需要在所有行的第一列中添加图像预览 我正在尝试使用 QIcon 添加此内容 library table insertRow index library table setIte
  • 在 JavaScript 中创建隐藏字段

    如何在 JavaScript 中将隐藏字段创建为特定的表单
  • 神秘的CloudFront“错误请求”

    我已经设置了一个新的域和 Web 服务器 以及一个为其提供服务的 CloudFront 发行版 CloudFront 已成功在其自己的域上为站点提供服务 d1lnegrqin0up5 cloudfront net 我希望 mpe io 不带
  • 为什么 MongoDb 不将我的斜杠存储在该字符串中?

    谁能告诉我为什么这个命令在 MongoDB shell 客户端不起作用 db coll update live true set mask D D D D D D D D false true but db coll findOne id
  • Unicode 符号和操作系统/浏览器字体支持

    有很多精彩的 unicode 符号 这真太了不起了 但如果我不知道我的用户的字体是否支持它们 它们就毫无用处 我怎样才能找到它 我可以跟踪用户的字体是否支持 unicode 符号吗 有什么办法可以有某种后备吗 如果不支持此 unicode
  • Microsoft.Practices.ServiceLocation 来自哪里?

    有谁知道哪里Microsoft Practices ServiceLocation来自 这是 MS EnterpriseLibrary 中使用的命名空间和 dll 诚然 这是一个非常简单的 dll 只有少数类 使用反射器 但我找不到它的已发
  • 动态改变admob横幅尺寸

    事情是这样的 你可能知道 Admob 有一个AdSize 函数 你把它放在哪里Banner要显示横幅广告和平板电脑横幅的 AD banner 我想要做的是获取设备的屏幕尺寸 以便我可以将其放入 if 语句中 然后为正确的设备放置正确的横幅
  • 如何设置全局CURL速率(速度)限制?

    我环顾四周寻找 CURL 设置文件 但在 etc 中没有找到它 并且在curl 站点 ether 上也没有找到太多 所以基本上我想要做的就是设置curl可以上传的最大速度限制 无论有多少个实例正在运行 以便我的服务器有一些上传能力留给其他任
  • python 子进程正在覆盖用于标准输出的文件 - 我需要它附加到文件(Windows)

    我想附加STDOUT of subprocess call 到现有文件 我下面的代码覆盖该文件 log file open log file path r cmd r echo some info for the log file subp
  • 缩进多行标签

    我有以下自动生成的 HTML http jsfiddle net BrV8X http jsfiddle net BrV8X 使用 CSS 缩进标签以便单选按钮下方有一些空白的建议方法是什么 label display block marg
  • geom_smooth 自定义线性模型

    一边看着this https stackoverflow com questions 44766497 plotting multiple regression lines based on a variable in rs ggplot2
  • 如何隐藏winforms numericUpDown控件上的箭头?

    为了隐藏箭头 我添加了 numericUpDown Controls 0 Hide 它隐藏了箭头 但在打开表单时留下了空白 如何将它们隐藏为像简单的文本框一样 您可以通过访问 numericUpDown 来隐藏箭头Controls财产 您可
  • 按需复制 Google 电子表格

    我创建了一个相当复杂的 Google 电子表格 我希望用户能够单击按钮或点击链接 并获取此电子表格的副本 他们可以在其中填写数据 我稍后会检查手动处理这些数据 无论如何 我可以通过复杂的链接或一些 JavaScript 甚至可能使用服务器端
  • VS Code 中的快速文本滚动

    我正在 macOS 上测试 Visual Studio Code 想知道是否有可以加快滚动速度的组合键 例如 我需要这个来快速从代码的早期部分转到文件末尾的部分 e g in Emacs when I hold up down arrow
  • 使用 Bootstrap 3 如何隐藏表中的列?

    我试图在我的响应式设计中隐藏列col xs and col sm 我首先尝试使用hidden xs hidden sm类 但这不起作用 我也尝试过使用visible desktop正如这里提到的 Twitter Bootstrap 响应式
  • 在特定的 Woocommerce 产品类别档案页面上显示产品属性

    我想在类别页面上显示两个属性 仅在特定类别上显示属性名称和值 我发现的这段代码显示了属性的标签 但复制了值 我真的很难显示类别变量 任何帮助是极大的赞赏 代码 add action woocommerce after shop loop i
  • 将泛型参数与 impl 中的关联类型相匹配

    我有一个具有关联类型和通用结构的特征 trait Generator type Foo fn generate self gt Self Foo struct Baz