有没有办法实现{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}类型)?因为如果所有整数类型的实现都是相同的,为什么还要关心确切的类型呢?
可以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)