【问题标题】:Redefine trait for infix operators重新定义中缀运算符的特征
【发布时间】:2015-06-24 16:20:49
【问题描述】:

我正在尝试重新定义 Add 特征,以便我可以将其用作中缀运算符:

//use std::ops::Add;

trait Add<RHS=Self> {
    // type Output;

    fn add(self, rhs: RHS) -> Self;
}

fn summ<T: Add>(a: T, b: T) -> T {  
    a+b
}  // doesn't compile 

是否可以重新定义 Add 特征,使其使用 + 运算符来添加功能?

【问题讨论】:

  • 你为什么要重新定义特质?标准的Add trait 已经提供了二进制+ 操作符的重载。
  • 因为标准 Add 使用关联类型 Output - 这是我不想使用的一块。如果你看一下def。我的功能,你可以看到。

标签: rust traits infix-operator


【解决方案1】:

无法重新定义任何特征。您可以使用相同的名称和相同的方法创建自己的特征,这就是您所做的。但是,运算符 +std::ops::Add 绑定,因此在这种情况下它不会有用。

在您的情况下,您似乎只想指定 Add::Output 以返回 T

use std::ops::Add;

fn summ<T>(a: T, b: T) -> T
    where T: Add<Output = T>
{  
    a + b
}

【讨论】:

  • 谢谢 - 这解决了问题。美丽的解决方案 - 荣誉。
猜你喜欢
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 2011-02-09
相关资源
最近更新 更多