super и self

Ключевые слова super и self в пути используются, чтобы устранить неоднозначность между используемыми элементами модуля.

fn function() {

println!("вызвана `function()`");

}

mod cool {

pub fn function() {

println!("called `cool::function()`");

}

}

mod my {

fn function() {

println!("вызвана `my::function()`");

}

mod cool {

pub fn function() {

println!("вызвана `my::cool::function()`");

}

}

pub fn indirect_call() {

// Давайте вызовем  все функции под названием `function` в этой области видимости!

print!("вызвана `my::indirect_call()`, с помощью которой\n> ");

// Ключевое слово `self` ссылается на область видимости текущего модуля.

// В нашем случае - модуль `my`.

// Вызов `self::function()`, так же как и вызов `function()` дают одинаковый результат,

// т.к они ссылаются на одну и ту же функцию.

self::function();

function();

// Мы так же можем использовать ключевое слово `self`,

// чтобы получить доступ к другим модулям внутри модуля `my`:

self::cool::function();

// Ключевое слово `super` ссылается на родительскую область видимости (вне модуля `my`).

super::function();

// Этим действием мы свяжем `cool::function` в области видимости *контейнера*.

// В данном случае область видимости контейнера является самой дальней областью видимости.

{

use cool::function as root_function;

root_function();

}

}

}

fn main() {

my::indirect_call();

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Загрузка...