FooBuilder
を作成する場合、&mut Bar
を提供します。私がFoo
をビルドするときに&Bar
とFoo
を提供したいのであれば、&self
のメソッドをBar
から起動できるはずです。換言すれば、変動可能な借り入れは、生涯にわたって存在しているのはFooBuilder
である。ビルダーへの変更可能な参照を与えるにはどうすればよいのですか?
error: borrowed value does not live long enough
--> <anon>:24:15
|
24 | let foo = FooBuilder::new(&mut bar).build();
| ^^^^^^^^^^^^^^^^^^^^^^^^^ does not live long enough
|
note: reference must be valid for the block suffix following statement 1 at 24:48...
--> <anon>:24:49
|
24 | let foo = FooBuilder::new(&mut bar).build();
| ^
note: ...but borrowed value is only valid for the statement at 24:4
--> <anon>:24:5
|
24 | let foo = FooBuilder::new(&mut bar).build();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
help: consider using a `let` binding to increase its lifetime
--> <anon>:24:5
|
24 | let foo = FooBuilder::new(&mut bar).build();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0502]: cannot borrow `bar` as immutable because it is also borrowed as mutable
--> <anon>:25:5
|
24 | let foo = FooBuilder::new(&mut bar).build();
| --- mutable borrow occurs here
25 | bar.bar();
| ^^^ immutable borrow occurs here
26 | }
| - mutable borrow ends here
error: aborting due to 2 previous errors
あなたの質問は何ですか? – antoyo
質問を修正して既存の回答を無効にするのは、最高の礼儀ではありません。 – Shepmaster
私はこれが可能だとは思わない、申し訳ありません。変更可能な参照を共有のものにダウングレードして、共有の有効期間を取り戻すことはできません。 – Veedrac