如何在 Rust 中实现 `{integer}` 类型的特征

Mar*_*ger 4 rust

有没有办法实现{integer}类型(或所有整数类型)的特征。因为(作为一个最小的例子):

pub trait X {
    fn y();
}

impl<T> X for T {
    fn y() {
        println!("called");
    }
}

fn main() {
    (32).y();
}
Run Code Online (Sandbox Code Playgroud)

给出错误:

error[E0689]: can't call method `y` on ambiguous numeric type `{integer}`
  --> src/main.rs:12:10
   |
12 |     (32).y();
   |          ^
   |
help: you must specify a concrete type for this numeric value, like `i32`
   |
12 |     (32_i32).y();
   |      ~~~~~~

For more information about this error, try `rustc --explain E0689`.
Run Code Online (Sandbox Code Playgroud)

有没有办法X为任何整数类型实现特征,以便它可以用于任何整数(甚至是不明确的{integer}类型)?因为如果所有整数类型的实现都是相同的,为什么还要关心确切的类型呢?

use*_*327 5

可以T通过num_traits::PrimInt这样的方式绑定类型:

use num_traits::PrimInt;

trait Trait {
    fn y(self) -> Self;
}

impl<T: PrimInt> Trait for T {
    fn y(self) -> Self {
        println!("called");
        return self;
    }
}

fn main() {
    let x = 32;
    println!("{}", x.y());
}
Run Code Online (Sandbox Code Playgroud)