繁体   English   中英

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

[英]How to implement a trait on `{integer}` type in Rust

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

pub trait X {
    fn y();
}

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

fn main() {
    (32).y();
}

给出一个错误:

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`.

有没有办法为任何 integer 类型实现特征X ,以便它可以用于任何 integer(甚至是模棱两可的{integer}类型)? 因为如果所有 integer 类型的实现都是一样的,为什么要关心确切的类型?

可以像这样通过num_traits::PrimInt绑定类型T

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());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM