4
私はちょうどRust(1.12)で何らかの行動を起こしました。説明できません。私はRefCell<Option<i32>>
で遅延ロードを実装構造体やデータにアクセスする機能を持っている:`if`条件が本体に残っています
struct Foo {
data: RefCell<Option<i32>>
}
impl Foo {
fn get_data(&self) -> i32 {
if self.data.borrow().is_none() { // <--- (a)
let d = 1337;
self.data.borrow_mut() = Some(d); // <--- (b)
d
} else {
self.data.borrow().unwrap()
}
}
}
これは、ランタイムエラーをコンパイルしますが得られます。RefCell
はライン上borrow_mut
しようとしたときにボローがすでにアクティブであることを不平を言う(b)。私はif文を変更した場合の問題は、しかし、発生しません、次
let is_none = self.data.borrow().is_none();
if is_none {
質問:ラインであれば条件でボローがあるのはなぜ(A)の体内まだアクティブ ifステートメント?私がbool
に借りているのではなく、借りた金額だけを保持しているので、is_none()
への呼び出しは終了しませんか?
ベータ版とナイトリー版のように見えます。 https://play.rust-lang.org/?gist=450c131dcefde855ea0cbd832290e046&version=nightly&backtrace=0 – aSpex