Я использую super
внутри модуля, чтобы ссылаться на имена в родительском пространстве имен. Однако я не могу заставить это работать, когда я ссылаюсь на имя в родительском пространстве имен, которое было внесено с помощью инструкции use
. Что я делаю не так?Невозможно использовать «супер», чтобы ссылаться на имя, которое было внесено «использованием» из другого ящика.
// crate mylib
pub fn lib_hello() {println!("Hello from mylib!");}
// crate mybin
extern crate mylib;
use mylib::lib_hello;
fn local_hello() {println!("Hello from here!");}
mod mymod {
fn f() { super::local_hello() } // Ok
fn g() { super::lib_hello() } // error: unresolved name `super::lib_hello`
}
fn main() {
lib_hello(); // Ok
}
редактировать: удалить pub
из local_hello
дополнительных разъяснений относительно того, что я прошу: Функция local_hello()
объявлена как частное в пространстве имен клети. Функция lib_hello()
вводится с use
, а также становится частным именем в пространстве имен ящиков. На данный момент имена local_hello
и lib_hello
имеют одинаковый рост: они оба находятся в пространстве имен ящиков, и оба являются частными. В mymod
Я использую super
для ссылки на пространство имен ящиков и вы можете получить доступ к local_hello
, но не lib_hello
. Что дает?
Я знаю о пространствах имен Python и C++. Возможно, есть какой-то важный бит, который мне нужно отучить?
Извинения, я не имел в виду 'local_hello()', которые должны быть помечены как 'pub', и я не хочу, чтобы он был экспортирован за пределы этого ящика (притворяйтесь, что это ящик lib на мгновение). Точно так же я хочу использовать 'lib_hello()', но не хочу реэкспортировать его из этого ящика, что я думаю, что 'pub use' делает. Изменит ли это ответ? – goertzenator
Ссылка на ссылку Rust: https://doc.rust-lang.org/book/crates-and-modules.html#re-exporting-with-pub-use – mdup
@goertzenator, да, это меняет ответ в что невозможно «использовать» то, что не экспортируется из родительского или дочернего модуля и которое не определено в самом родительском или родном модуле. –