Ключевое слово pub(crate)
Ключевое слово pub(crate) используется для управления
видимостью элементов внутри крейта. Оно делает функцию,
структуру, модуль или другое объявление доступным только
в пределах текущего крейта, но не снаружи него. Это
удобно, когда нужно использовать элемент в разных модулях
одного проекта, но не раскрывать его для внешних
пользователей библиотеки.
Параметром видимости выступает ключевое слово crate,
которое указывает, что доступ разрешён только внутри
текущего крейта. Без него обычное ключевое слово pub
делает элемент полностью публичным.
Синтаксис
pub(crate) fn function_name() {}
pub(crate) struct StructName {}
pub(crate) mod module_name {}
Пример
Давайте создадим функцию с видимостью pub(crate)
и вызовем её внутри того же крейта:
pub(crate) fn greet()
{
println!("Hello from crate");
}
fn main()
{
greet();
}
Результат выполнения кода:
"Hello from crate"
Пример
Давайте создадим структуру с видимостью pub(crate)
и полем, доступным только внутри крейта:
pub(crate) struct Config
{
pub(crate) name: String,
value: i32,
}
impl Config
{
pub(crate) fn new(name: &str, value: i32) -> Config
{
Config {
name: String::from(name),
value,
}
}
pub(crate) fn value(&self) -> i32
{
self.value
}
}
fn main()
{
let cfg = Config::new("abcde", 42);
println!("{}", cfg.name);
println!("{}", cfg.value());
}
Результат выполнения кода:
"abcde"
42
Пример
Давайте создадим модуль с видимостью pub(crate)
и обратимся к нему из главной функции:
pub(crate) mod utils
{
pub(crate) fn double(x: i32) -> i32
{
x * 2
}
}
fn main()
{
let res = utils::double(21);
println!("{}", res);
}
Результат выполнения кода:
42
Смотрите также
-
ключевое слово
visibility,
которое управляет областью видимости элементов -
ключевое слово
pub(super),
которое делает элемент видимым в родительском модуле -
ключевое слово
pub(crate),
которое делает элемент видимым внутри текущего крейта -
концепция
ownership,
которая определяет правила владения значениями в Rust