Как добавить конструктор в существующий тип примитива? - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь создать примитивные типы и типы объектов, добавив метод 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 | | }
  | |_^

1 Ответ

0 голосов
/ 27 февраля 2019

Вы не можете напрямую реализовывать методы для типов вне вашей собственной корзины.Однако, как говорится в справочном сообщении, вы можете определить новую черту и затем реализовать ее:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...