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()` を呼び出しても、`function()` を直接呼び出しても、どちらも // 同じ関数を参照するため、同じ結果になります。 self::function(); function(); // `my` 内の別のモジュールにアクセスするために `self` を使用することもできます。 self::cool::function(); // `super` キーワードは親スコープ(`my` モジュールの外側)を参照します。 super::function(); // これは *crate* スコープ内の `cool::function` に束縛されます。 // この場合、crate スコープは最も外側のスコープです。 { use crate::cool::function as root_function; root_function(); } } } fn main() { my::indirect_call(); }