что по сути означает «я знаю, что я делаю, поверь мне», компилятор верит, что ты знаешь, что делаешь. Эти проверки затем отключаются на время блока.

у я могу иметь несколько изменяемых ссылок на статический тип в одной и той же области?

Мой код:

static mut CURSOR: Option<B> = None;

struct B {
    pub field: u16,
}

impl B {
    pub fn new(value: u16) -> B {
        B { field: value }
    }
}

struct A;

impl A {
    pub fn get_b(&mut self) -> &'static mut B {
        unsafe {
            match CURSOR {
                Some(ref mut cursor) => cursor,
                None => {
                    CURSOR= Some(B::new(10));
                    self.get_b()
                }
            }
        }
    }
}

fn main() {
    // first creation of A, get a mutable reference to b and change its field.
    let mut a = A {};
    let mut b = a.get_b();
    b.field = 15;
    println!("{}", b.field);

    // second creation of A, a the mutable reference to b and change its field.
    let mut a_1 = A {};
    let mut b_1 = a_1.get_b();
    b_1.field = 16;
    println!("{}", b_1.field);

    // Third creation of A, get a mutable reference to b and change its field.
    let mut a_2 = A {};
    let b_2 = a_2.get_b();
    b_2.field = 17;
    println!("{}", b_1.field);

    // now I can change them all
    b.field = 1;
    b_1.field = 2;
    b_2.field = 3;
}

Я знаю озаимствование правила

одна или несколько ссылок (&T) к ресурсу,ровно одна изменяемая ссылка (&mut T).

В приведенном выше коде у меня есть структураA сget_b() метод возврата изменяемой ссылки наB, С этой ссылкой я могу изменить поля структурыB.

Странно то, что в одной области видимости может быть создано более одной изменяемой ссылки (b, b_1, b_2) и я могу использовать их все для измененияB.

Почему я могу иметь несколько изменяемых ссылок с'static время жизни показано вmain()?

Моя попытка объяснить это - поведение, потому что я возвращаю изменяемую ссылку с'static продолжительность жизни. Каждый раз звонюget_b() он возвращает ту же изменяемую ссылку. И в конце концов, это всего лишь одна идентичная ссылка. Это правильная мысль? Почему я могу использовать все изменяемые ссылки, полученные отget_b() в индивидуальном порядке?

Ответы на вопрос(1)

Ваш ответ на вопрос