Личная черта и E0119? - PullRequest
       6

Личная черта и E0119?

3 голосов
/ 23 апреля 2019

Есть ли у Rust такая вещь, как "частная черта"? Я имею в виду, что черта, определенная без pub, является ключевым словом private *

Код ниже дает ошибку компиляции:

error[E0119]: conflicting implementations of trait `MyFrom<i64>` for type `std::option::Option<&_>`:
  --> src/main.rs:22:1
   |
16 | impl<T: Foo> MyFrom<i64> for Option<T> {
   | -------------------------------------- first implementation here
...
22 | impl<T: Foo> MyFrom<i64> for Option<&T> {
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `std::option::Option<&_>`
   |
   = note: downstream crates may implement trait `Foo` for type `&_`

Но это не общедоступная черта, и это exe, как "нижележащие ящики могут реализовать черту Foo для типа &_"? Невозможно импортировать признак из exe crate, и даже если это возможно, это не признак pub, так rustc не поддерживает личные черты?

fn main() {
    trait MyFrom<T> {
        fn my_from(_: T) -> Self;
    }

    trait Foo {}

    impl<T: Foo> MyFrom<i64> for Option<T> {
        fn my_from(x: i64) -> Self {
            unimplemented!();
        }
    }

    impl<T: Foo> MyFrom<i64> for Option<&T> {
        fn my_from(x: i64) -> Self {
            unimplemented!();
        }
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...