Здравствуйте, 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 так, будто ты с Си работаешь.