我使用Actor
特質從機器人箱子:保存VEC後,模式匹配
extern crate robots;
use std::any::Any;
use robots::actors::{Actor, ActorCell};
#[derive(Clone, PartialEq)]
pub enum ExampleMessage {
Test { data: Vec<u8> },
}
pub struct Dummy {
data: Vec<u8>,
}
impl Actor for Dummy {
// Using `Any` is required for actors in RobotS
fn receive(&self, message: Box<Any>, _context: ActorCell) {
if let Ok(message) = Box::<Any>::downcast::<ExampleMessage>(message) {
match *message {
ExampleMessage::Test { data } => {
self.data = data; // cannot assign to immutable field
println!("got message")
}
}
}
}
}
impl Dummy {
pub fn new(_:()) -> Dummy {
let data = Vec::new();
Dummy { data }
}
}
錯誤:
error: cannot assign to immutable field `self.data`
--> <anon>:18:21
|
18 | self.data = data; // cannot assign to immutable field
| ^^^^^^^^^^^^^^^^
我明白爲什麼我當前的代碼不工作,但我不」不知道保存傳入數據的最佳方法是什麼(Vec
),以便我的Dummy
可以稍後訪問它。
我實現了Dummy'的演員特質'IMPL演員。因爲我正在實現這個特性,所以我不能使引用可變,因爲這會導致不兼容的類型錯誤。 – Anton
@Anton看我的編輯。 –
我無法使用RefCell,因爲它不符合特徵綁定的'std :: marker :: Sync'。我在github的機器人回購中發現了一個[測試](https://github.com/gamazeps/RobotS/blob/master/test/test.rs)。我必須使用Mutex,我會在今天晚些時候寫出答案。 – Anton