Re[17]: Развитие Rust
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 28.01.14 19:56
Оценка:
Здравствуйте, cl-user, Вы писали:

CU>Здравствуйте, kaa.python, Вы писали:


KP>>Ожидаемо. Ты вышел и скоупа f1, количество ссылок на rcs стало равным нулю. Попробуй хранить ее где-то выше.


CU>Вот пытаюсь создать хеш, вставить структуру. Извлечь получается только 1 раз. Как исправить? И как должна выглядеть функция get_callback — у меня что-то не получается


Не связывайся с unsafe и static, это хаки которых, по идее, в коде быть не должно. Вызывается у тебя дважды толи из за того, что в структурах присутсвуют уникальные указатели, толи из за ошибки компилятора который спотыкается об уникальные указатели в статических переменных.

Я дошел вот да такого эксперементального кода, который довольно хорошо иллюстрирует ситуацию:

struct MyStruct {
    val: int
}

static mut global_data: Option<~MyStruct> = None;

fn test_call() {
    unsafe {
        match global_data {
            Some(data) => { println!("We have data {:?}", data);}
            None => { println!("We don't have data");}
        }
    }
}

fn main() {

    unsafe {
        global_data = Some(~MyStruct{val: 42});
    }

    test_call();
    test_call();
}


Вывод:

We have data ~MyStruct{val: 42}
We don't have data


А если заменить Option<~MyStruct> на Option<MyStruct>, то все становится хорошо:

We have data ~MyStruct{val: 42}
We have data ~MyStruct{val: 42}


Найти в документации подтверждение того, что какое-то из поведений не верно не вышло

И на последок: зря ты пытаешься писать на Rust так, будто ты с Си работаешь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.