superとself
super及びselfキーワードは、要素にアクセスする際に、曖昧さをなくし、不必要なハードコーディングを避けるために使用できます。
fn function() {
println!("called `function()`");
}
mod cool {
pub fn function() {
println!("called `cool::function()`");
}
}
mod my {
fn function() {
println!("called `my::function()`");
}
mod cool {
pub fn function() {
println!("called `my::cool::function()`");
}
}
pub fn indirect_call() {
// `function`という名の様々な関数をこのスコープ内から参照してみましょう。
print!("called `my::indirect_call()`, that\n> ");
// `self`キーワードは現在のモジュールスコープを示します。
// この場合は`my`です。`self::function()`と`funcition()`は
// 同じ関数であるため、同じ結果になります。
self::function();
function();
// `my`以下の別のモジュールを呼び出す際に
// `self`を用いて明示的に参照できます。
self::cool::function();
// `super`は親スコープ(`my`の外側)を参照します。
super::function();
// 以下は *クレート* スコープ内の`cool::function`を束縛します。
// この場合、クレートスコープは一番外側のスコープです。
{
use crate::cool::function as root_function;
root_function();
}
}
}
fn main() {
my::indirect_call();
}