为什么 T 实现了 A+B 而没有实现特质 C:A+B?

Gue*_*OCs 2 traits rust

我对这个例子感到困惑。尽管i32实现了所有的Num + One + Zero + PartialOrd + RemAssign + Ord,当我将它们放入特征中以便我可以给出别名时,它不起作用。

use num_traits::{Num, identities::One, identities::Zero};
use std::cmp::{Ord, PartialOrd};
use std::ops::RemAssign;

pub trait Math: Num + One + Zero + PartialOrd + RemAssign + Ord {}

fn s<T: Num + One + Zero + PartialOrd + Ord + RemAssign>(t: T) {
    unimplemented!();
}

fn ss<T: Math>(t: T) {
    unimplemented!();
}

fn sss() {
    let x: i32 = 5;
    ss(x);
}
Run Code Online (Sandbox Code Playgroud)

操场

有没有办法强制所有执行的事情都Num + One + Zero + PartialOrd + RemAssign + Ord执行Math

oll*_*lpu 5

是的,通过添加一个毯子实现:

impl<T: Num + One + Zero + PartialOrd + RemAssign + Ord> Math for T {}
Run Code Online (Sandbox Code Playgroud)