Как использовать const внутри модуля в Rust - PullRequest
0 голосов
/ 21 сентября 2019

Я относительно новичок в Rust, только начал учиться.У меня есть этот код во время изучения модулей в Rust.

mod delicious_snacks {
    use self::fruits::PEAR as fruit;
    use self::veggies::CUCUMBER as veggie;

    mod fruits {
        pub const PEAR: &'static str = "Pear";
        pub const APPLE: &'static str = "Apple";
    }

    mod veggies {
        pub const CUCUMBER: &'static str = "Cucumber";
        pub const CARROT: &'static str = "Carrot";
    }
}

fn main() {
    println!(
        "favorite snacks: {} and {}",
            delicious_snacks::fruit,
            delicious_snacks::veggie
    );
}

Я получаю эту ошибку при печати фруктов и овощей, которые они являются личными :

error[E0603]: constant `fruit` is private
  --> src/main.rs:19:31
   |
19 |             delicious_snacks::fruit,
   |                               ^^^^^

error[E0603]: constant `veggie` is private
  --> src/main.rs:20:31
   |
20 |             delicious_snacks::veggie
   |                               ^^^^^^

Может кто-нибудь объяснить мне это и помочь мне решить?

Ответы [ 2 ]

2 голосов
/ 21 сентября 2019

Доступность элемента, определенного с помощью use, не зависит от доступности используемого элемента.Это означает, что в то время как PEAR является общедоступным, use self::fruits::PEAR as fruit; является частным.Вы должны экспортировать эти предметы публично:

pub use self::fruits::PEAR as fruit;
pub use self::veggies::CUCUMBER as veggie;

( Постоянная ссылка на игровую площадку )

1 голос
/ 21 сентября 2019

Это означает, что он виден только из модуля delicious_snacks.

Для использования delicious_snacks::fruit и других констант их необходимо публично экспортировать из модуля с использованием модификатора pub:

mod delicious_snacks {
    pub use self::fruits::PEAR as fruit;
    pub use self::veggies::CUCUMBER as veggie;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...