有没有办法在多个特征上实现一个特征?

2023-11-27

为什么这不起作用:

trait Update {
    fn update(&mut self);
}

trait A {}
trait B {}

impl<T: A> Update for T {
    fn update(&mut self) {
        println!("A")
    }
}

impl<U: B> Update for U {
    fn update(&mut self) {
        println!("B")
    }
}
error[E0119]: conflicting implementations of trait `Update`:
  --> src/main.rs:14:1
   |
8  | impl<T: A> Update for T {
   | ----------------------- first implementation here
...
14 | impl<U: B> Update for U {
   | ^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation

我假设稍后会检查类型是否重叠。


您期望该程序的输出是什么?

struct AAndB {}
impl A for AAndB {}
impl B for AAndB {}

let a_and_b = AAndB {};
a_and_b.update();

有一个不稳定的编译器功能,专业化,您可以在夜间构建中启用它,这可以让您拥有重叠的实例,并且使用最“专业”的实例。

但是,即使启用了专业化,您的示例也无法工作,因为A and B是完全等价的,所以你永远无法明确地选择一个实例。

一旦出现明显“更专业”的实例,它就会按预期进行编译和工作 - 前提是您使用的是nightly启用专业化的 Rust 构建。例如,如果其中一个特征受到另一个特征的限制,那么它就更加专业,所以这会起作用:

#![feature(specialization)]

trait Update {
    fn update(&mut self);
}

trait A {}
trait B: A {}

impl<T: A> Update for T {
    default fn update(&mut self) {
        println!("A")
    }
}

impl<U: B> Update for U {
    fn update(&mut self) {
        println!("B")
    }
}

指定实现方法为default允许另一个更具体的实现来定义它自己的方法版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在多个特征上实现一个特征? 的相关文章

随机推荐

  • 在线 Node.js 服务器

    Node js 是否足够成熟 可以在其中构建整个 Web 应用程序 我的意思是完全在 Node js 中 我在某处读到 出于某种原因 Node js 后面应该有 例如 nginx 这是真的吗 Node js 不能独立存在吗 有没有基于 No
  • MongoDB 计数集合 Node.js

    我正在尝试通过 Node js 与 MongoDB 交互 但在使用 count 方法时遇到了一些问题 我在用节点 mongodb native看起来我正在做的事情应该有效 我的代码示例 var get total num docs func
  • 我可以使用 MERGE INTO 来模拟 Apache Derby 中的“upsert”吗?

    我们正在使用 Derby 并且有很多代码 如下所示 try ResultSet rs executeQuery if rs next updateRowSet rs rs updateRow else executeUpdate 过去 我们
  • 使用 Jackson 反序列化通用类型

    我正在尝试创建一个使用 Jackson 来反序列化 POJO 的类 看起来像这样 public class DeserialiserImp
  • 使用负索引从 pyspark 字符串列的最后一个索引中子串多个字符

    密切相关 Spark Dataframe 列与其他列的最后一个字符但我想从中提取多个字符 1 index 我有以下 pyspark 数据框df number event type 0342224022 11 0112964715 11 我想
  • Objective-C 中的非规范化浮点数?

    Stack Overflow 问题 答案的相关性是什么为什么将 0 1f 更改为 0 会使性能降低 10 倍 对于 Objective C 如果有任何相关性 这应该如何改变我的编码习惯 有没有办法在 Mac OS X 上关闭非规范化浮点 看
  • 如何使用 Jest 模拟第三方 React 组件?

    TLDR 模拟从第三方库导入的 React 组件的正确方法是什么 我正在测试一个名为
  • 有没有一种简单的方法来输出按列的 CSV?

    我正在尝试将多个不同长度的数据列表输出到 CSV 文件 每个列表应该是输出 CSV 文件中的一列 有直接的方法吗 如果我将每个列表作为一行输出 我只需循环每个列表并在到达末尾时输出返回 但这种方法在按列工作时不起作用 我想过一次逐项检查所有
  • 与 Google Reader 同步时如何跳过已知条目?

    为了将离线客户端写入 Google Reader 服务 我想知道如何最好地与该服务同步 似乎还没有官方文档 到目前为止我找到的最好的来源是 http code google com p pyrfeed wiki GoogleReaderAP
  • 我想将子数组添加到 php 中的一个数组中[重复]

    这个问题在这里已经有答案了 我有这样的数组 Array 0 gt Array 0 gt rose 1 gt monkey 2 gt donkey 1 gt Array 0 gt daisy 1 gt monkey 2 gt donkey 2
  • 如果用户没有安装 .NET,如何部署 C# 应用程序?

    我有一个 C 程序 我想将其提供给我的用户 但问题是它需要 NET Framework 版本 4 0 这是一个问题 因为它是最近发布的 2010 年 4 月 很多人可能还没有它 更糟糕的是 下载和安装框架需要一段时间 约 10 分钟 有什么
  • 在android中上传进度条?

    我使用下面的代码将视频上传到 php 服务器 它工作正常 但是我需要在上传文件时显示进度条 我需要在文件上传和进度条增量之间进行同步 有人提出一些想法吗 HttpURLConnection conn null DataOutputStrea
  • 删除某个类型的所有指针的标准 c++11 方法

    有没有办法用一些 c 11 或最多一个 boost 库来做到这一点 include
  • 如何检查使用了哪个segue

    我有两个 segue 导致相同的结果viewController 有 2 个按钮连接到同一个viewController使用2个segue 在那里面viewController我需要检查点击了哪个按钮 所以实际上我需要检查使用 执行了哪个s
  • 谷歌文档脚本中的“有必要分离元素”错误

    当我尝试将段落从一个文档复制到另一个文档时 出现意外错误 需要分离元件 这是什么意思 我究竟做错了什么 function test copy paragrahps var final final var doc1 get doc final
  • 使用 Google OpenID 进行 Android 身份验证。接下来是什么?

    我不是程序员 但我需要自己做这件事 我需要一些帮助 我这两天一直在寻找解决方案 但没有找到 好的 我正在编写 Android 本机应用程序 我的第一个目标是实现通过Google帐户 已在手机上设置 登录的可能性 所以我使用 AccountM
  • 计算数组中的反转次数

    我正在设计一种算法来执行以下操作 给定数组A 1 n 对于每一个i lt j 找到所有反演对 使得A i gt A j 我正在使用合并排序并将数组 A 复制到数组 B 然后比较这两个数组 但我很难了解如何使用它来查找反转数 任何提示或帮助将
  • 在 pyqt 小部件中实现 pyqtgraph 多处理

    我正在尝试在我用 Python 设计的 GUI 上绘制图像 完整的程序将从相机收集图像数据 然后在 GUI 上显示图像 我已经探索过使用 matplotlib 但它对于我的应用程序来说太慢了 我需要绘图相当快地更新 最好是与我从相机获取的速
  • 如何禁用 Ruby on Rails 应用程序中的所有 form_for 输入字段?

    我正在尝试让我的 Rails 应用程序变得干燥一些 所以我想在我的应用程序中渲染一个表单show查看但是disable所有输入字段 show html erb 最好的方法是什么 谢谢你的帮助 JavaScript 一种方法是使用 JS 来完
  • 有没有办法在多个特征上实现一个特征?

    为什么这不起作用 trait Update fn update mut self trait A trait B impl