【问题标题】:Putting a requirement on the type of a member of a trait implementation对特征实现成员的类型提出要求
【发布时间】:2016-09-15 17:12:51
【问题描述】:

我有一个实现另一个特征的特征:

trait RandomAccessIterator : Sub + VariousOthers {}

我如何指定,对于这个特征的所有实现,减法的结果(Sub 中的Output 类型)必须是某种类型,例如isize?这样,如果我编写一个使用实现此特征的对象的通用函数,我知道(更重要的是,编译器知道)A - B 的结果是isize 类型。

【问题讨论】:

  • trait RandomAccessIterator : Sub<Output = isize> + VariousOthers + Sized {} 不起作用吗?您没有提供任何代码来显示 您已经尝试过的内容 是如何失败的。我对拥有 70k 声誉的人的期望更高:-(。
  • @Shepmaster:是的,这行得通。谢谢你。我不确定展示我失败的尝试将如何帮助您回答问题。这是我以前不知道的语法。我可以猜出一百个语法可能是什么。这对你有什么帮助?
  • 失败的尝试可能有在成功实现需求时开始工作的代码。这对于验证我的猜测是否有效很有用。此外,it's expected that you show that you've expended effort before asking a question。这包括您自己的代码尝试,还包括您在 SO 和 Internet 上其他地方所做的搜索。没有这一切,问题就会转移到“代码损坏。你修复了吗?”另请参阅:minimal reproducible example.
  • @Shepmaster: “还有你在 SO 和 Internet 上的其他地方所做的搜索” -- 当我发现上述信息完全无用时米回答问题。我只想说,你和我在什么是好问题上存在分歧。而且我们不太可能在这里达成协议。不管怎样,谢谢你回答我的问题。

标签: rust traits


【解决方案1】:
trait RandomAccessIterator : Sub<Output = isize> + VariousOthers {}

正如The Rust Programming Language 章节中关于associated typestrait objects with associated types 部分中所讨论的:

N=Node 语法允许我们为N 类型参数提供具体类型Node。与E=Edge 相同。如果我们不提供此约束,我们将无法确定该特征对象与哪个 impl 匹配。

虽然这不是一个特征对象,但同样的语法也适用。大多数人都会遇到这个when using operators like Mul

【讨论】:

    猜你喜欢
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2021-08-22
    相关资源
    最近更新 更多