マージ箱入り要素
答えて
あなたがboxed_merge
関数内のボックスを参照解除することで、あなたのmerge
機能を再利用することができます。これは割り当てを再利用ではなく、私はそのAを提唱う
fn boxed_merge(a1: Box<A>, a2: Box<A>) -> Box<A> {
Box::new(merge(*a1, *a2))
}
非ボックス機能を再利用することをお勧めします。 – ljedrz
あなたはそれらを参照解除することにより、箱入りの引数の内容にアクセスし、新しいBox
でそれらを組み合わせることができます。たとえば:
fn merge(a1: Box<usize>, a2: Box<usize>) -> Box<usize> {
Box::new(*a1 + *a2)
}
fn main() {
let a1 = Box::new(1);
let a2 = Box::new(2);
println!("{}", merge(a1, a2));
}
新しいものがで値merge
ないは、あなたの基本実装する必要があります作成しないことに注意してください。むしろ、突然変異法はより柔軟性を提供する。その後、値ごととすることにより、箱入りの値メソッドのためにその上に構築することができます:あなたは、追加の割り当てを実行する必要はありませんよう
struct A(u8);
impl A {
fn merge_ref(&mut self, other: &A) {
self.0 += other.0
}
}
fn merge(mut a1: A, a2: A) -> A {
a1.merge_ref(&a2);
a1
}
fn boxed_merge(mut a1: Box<A>, a2: Box<A>) -> Box<A> {
a1.merge_ref(&a2);
a1
}
fn main() {
let a1 = A(1);
let a2 = A(2);
let a3 = merge(a1, a2);
let boxed_a3 = Box::new(a3);
let boxed_a4 = Box::new(A(4));
let boxed_a7 = boxed_merge(boxed_a3, boxed_a4);
println!("{}", boxed_a7.0);
}
は特に、この箱入りの場合は、より効率的になります。
これだけ
Copy
構造のマージのために適用されます。あなたがマージされている2つのセットを持っていた場合、セットの要素がコピー可能ではないかもしれません
merge_ref
の値によってで合併する事を取り、箱の外に移動するには、同じトリックを使用することによって対処することができ
boxed_merge
方法:
struct B(Vec<u8>);
impl B {
fn merge_ref(&mut self, other: B) {
self.0.extend(other.0)
}
}
fn merge(mut b1: B, b2: B) -> B {
b1.merge_ref(b2);
b1
}
fn boxed_merge(mut b1: Box<B>, b2: Box<B>) -> Box<B> {
b1.merge_ref(*b2);
b1
}
fn main() {
let b1 = B(vec![1]);
let b2 = B(vec![2]);
let b3 = merge(b1, b2);
let boxed_b3 = Box::new(b3);
let boxed_b4 = Box::new(B(vec![4]));
let boxed_b7 = boxed_merge(boxed_b3, boxed_b4);
println!("{:?}", boxed_b7.0);
}
ここでは余分な割り当てはありません。
これは、Copy構造のマージにのみ適用されます。結合された2つのセットがある場合、セットの要素はコピーできません(例: 'Box
@ oli_obk-kerそれは本当ですが、もしそうなら、私はfn merge_ref(&mut self、other:A)に変更します。これは、無関係な割り当てを避けるという同じ利点を持っています。 – Shepmaster
- 1. 箱入り列挙
- 2. Parcelableと箱入りのクラス
- 3. マージ要素日付
- 4. 箱入りのionicとphonegapのCSS
- 5. 同じJSON要素のマージ
- 6. 1列に2つの配列をマージ(要素があまりにもマージする必要があります)
- 7. リストからjson要素をマージする
- 8. 入力要素
- 9. ヌル箱入りオブジェクトをアンボクシングスロー予期しないNullPointerExceptionが
- 10. クラスが既知の(箱入りの)プリミティブインスタンスを作成する
- 11. なぜ箱入りベクトルが遅いのですか?
- 12. 入力と要素
- 13. 挿入要素D3js
- 14. アルゴリズム - 入力要素
- 15. 挿入要素が
- 16. 挿入要素DoubleLinked
- 17. 入力要素の幅が選択要素の幅よりも短い
- 18. 入力要素はファイルの出力要素と異なります。C++
- 19. 挿入親要素のID
- 20. 挿入要素のPython
- 21. 要素タイプ「入力は」ブロガー
- 22. javascriptの入力要素
- 23. Angularjs:ng-repeat要素の入力
- 24. 入力要素のファイルデータ
- 25. HTML入力要素がC#
- 26. STLコンテナ挿入要素
- 27. Mootools要素の注入
- 28. N要素を1つの要素(タプル)に入れ、次にすべてのN要素を入れて別の要素(タプル)に入れる
- 29. GGplot箱ひげ図箱ひげ図
- 30. ゴミマスターブランチゴミ箱
'a1'と' a2'の合併についてどう思いますか? – ljedrz
私はマージを 'merge(a1:A、a2:A) - > A'と考えます。これをより明確にするために私の質問を編集しました。 – ynimous