2017-03-24 11 views
1

構造体の外側にメソッドが作成されるのはなぜですか?なぜRustの構造体の外にメソッドを宣言する必要がありますか?

C#のような言語では、構造体内にメソッドを追加できます。私は、CやC++のような言語ではヘッダーファイルを持っているので分かりますが、私が知っている限り、Rustにヘッダーファイルを作成することはできません。

+1

これにより、定義していないタイプのユーザー定義特性の実装を提供できます。つまり、構造体上の "メソッド"のセットは、構造体が定義されているファイルの外側でさえも拡張することができます。 – Alec

答えて

8

ほとんどの言語では、「方法」は文法的な砂糖の一部にすぎません。あなたは実際にオブジェクトを持っていないし、そのメソッドを呼び出す、あなたはそのオブジェクトへの参照を取る関数を持って、それを持っています。通常の関数とは対照的に、オブジェクトへの参照はドット表記を使用して暗黙的に渡されます。

struct Foo { 
    //... 
} 

impl Foo { 
    fn do_something(self: &Self) { //"self: &Self" is a more verbose notation for "&self" 
     //... 
    } 
} 

だからこの

my_foo.do_something(); 

のようにそれを呼び出すと、私はそれが構造体であること、それがより明確にする錆の開発者によってなされた決定だと思う基本的に

Foo::do_something(&my_foo); 

と同じですただのデータセットだけではありません。

これは、既に存在するタイプの形質導入を可能にするものです。

関連する問題