我试图通过将new方法添加到usize来制作基本类型和对象类型:

impl usize {
    fn new(value: &u32) -> usize {
        value as usize
    }
}

我不知道消息要说什么:

error[E0390]: only a single inherent implementation marked with `#[lang = "usize"]` is allowed for the `usize` primitive
 --> src/lib.rs:1:1
  |
1 | / impl usize {
2 | |     fn new(value: &u32) -> usize {
3 | |         value as usize
4 | |     }
5 | | }
  | |_^
  |
help: consider using a trait to implement these methods
 --> src/lib.rs:1:1
  |
1 | / impl usize {
2 | |     fn new(value: &u32) -> usize {
3 | |         value as usize
4 | |     }
5 | | }
  | |_^

最佳答案

您无法在自己的 crate 之外的类型上直接实现方法。但是,如帮助消息所述,您可以定义一个新特征,然后实现它:

pub trait NewFrom<T> {
    fn new(value: T) -> Self;
}

impl NewFrom<&u32> for usize {
    fn new(value: &u32) -> Self {
        *value as usize
    }
}

尽管如此,这还是一件奇怪的事情。通常,您只需要使用内置转换:
let int: u32 = 1;
let size = int as usize;

关于rust - 如何将构造函数添加到现有原始类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54910547/

10-09 19:48