std::ops
には多くの操作がありますが、単純な割り当てには何もありません。Rustで割り当て操作をどのようにオーバーロードできますか?
私はC++のバックグラウンドから来ています。コピーコンストラクタと代入演算子のオーバーロードがあります。私はそのようなものが必要です。
std::ops
には多くの操作がありますが、単純な割り当てには何もありません。Rustで割り当て操作をどのようにオーバーロードできますか?
私はC++のバックグラウンドから来ています。コピーコンストラクタと代入演算子のオーバーロードがあります。私はそのようなものが必要です。
You can notオーバーロード割り当て。ある場所から別の場所に変数を移動することは、Rustの所有権セマンティクスの中核要素であり、上書きすることはできません。
もう1つの答えは、Copy
特性をカスタム実装することを示唆しています。これはthere's nothing to implementとして、意味をなさない:
pub trait Copy: Clone { }
あなたがタイプにClone
を実装することができますが、明示的に呼び出す必要がありclone
使用する:
let foo = bar.clone();
を実際の割り当てはまだだけコピーされビットを右側から左側に変更する場合、唯一の違いは、あなたがbar
の所有権を放棄しないことです。
あなたのタイプは、単にビットをコピーして複製することができなら、それはCopy
を実装することが適切です。 何らかの機能を実行することによって複製できる場合は、Clone
を実装することが適切です。型の指定された代入でコードを暗黙的に実行する方法はわかりません(そして、それはという良いことをとして数えます)。
私が言ったように、私は混乱しました。 私の質問への答えは、Copy
とClone
の形質を得ることです。私はちょうど追加する必要があります
#[derive(Clone, Copy)]
私のタイプの定義の上;そうすれば私は自分の望む機能を得ることができます。
割り当てとコピーのカスタマイズされたロジックのために、導出を使用する代わりにCopy
とClone
を簡単に実装できます。
これはあなたの質問とどのように関連していますか?これは、「代入演算子のオーバーロード」に共通するものは何もありません。 –
@VictorPolevoy正確に何をしたいですか? –
あなたは '= 'である"オーバーロード代入演算子 "について尋ねました。つまり、割り当て中にカスタムロジックを作成する方法を知りたいということです。 'Clone'と' Copy'特性を導出しても何もオーバーロードされません。ここではこの代入演算子のオーバーロード代入演算子には何も関係しません。単に、私はインターネット上でそのような情報を見て、この質問を見つけました。私はこれに非常に興奮しましたが、あなたの答えは本当に役に立たないです。 –
私は、Rustの割り当てに関する私の理解が間違っていたことを認識しました。 (ほとんどの時間は混乱します)。 –