2016-05-22 7 views

答えて

3

You can notオーバーロード割り当て。ある場所から別の場所に変数を移動することは、Rustの所有権セマンティクスの中核要素であり、上書きすることはできません。

もう1つの答えは、Copy特性をカスタム実装することを示唆しています。これはthere's nothing to implementとして、意味をなさない:

pub trait Copy: Clone { } 

あなたがタイプにCloneを実装することができますが、明示的に呼び出す必要がありclone使用する:

let foo = bar.clone(); 

実際の割り当てはまだだけコピーされビットを右側から左側に変更する場合、唯一の違いは、あなたがbarの所有権を放棄しないことです。


あなたのタイプは、単にビットをコピーして複製することができなら、それはCopyを実装することが適切です。 何らかの機能を実行することによって複製できる場合は、Cloneを実装することが適切です。型の指定された代入でコードを暗黙的に実行する方法はわかりません(そして、それはという良いことをとして数えます)。

+0

私は、Rustの割り当てに関する私の理解が間違っていたことを認識しました。 (ほとんどの時間は混乱します)。 –

0

誤認

私が言ったように、私は混乱しました。 私の質問への答えは、CopyCloneの形質を得ることです。私はちょうど追加する必要があります

#[derive(Clone, Copy)] 

私のタイプの定義の上;そうすれば私は自分の望む機能を得ることができます。

割り当てとコピーのカスタマイズされたロジックのために、導出を使用する代わりにCopyCloneを簡単に実装できます。

+0

これはあなたの質問とどのように関連していますか?これは、「代入演算子のオーバーロード」に共通するものは何もありません。 –

+0

@VictorPolevoy正確に何をしたいですか? –

+0

あなたは '= 'である"オーバーロード代入演算子 "について尋ねました。つまり、割り当て中にカスタムロジックを作成する方法を知りたいということです。 'Clone'と' Copy'特性を導出しても何もオーバーロードされません。ここではこの代入演算子のオーバーロード代入演算子には何も関係しません。単に、私はインターネット上でそのような情報を見て、この質問を見つけました。私はこれに非常に興奮しましたが、あなたの答えは本当に役に立たないです。 –

関連する問題