因此,我希望能夠在任務之間發送特質對象,但無法弄清楚是否可能。它似乎不可能,因爲它們顯然不符合Send
類型。在Rust中的任務之間發送特質對象
下面的代碼演示基本上就是我想要做的事:
trait Bar {
fn bar(&self);
}
struct Foo { foo: uint }
impl Bar for Foo {
fn bar(&self) {
println!("foo: {}", self.foo);
}
}
fn main() {
let foo = box Foo { foo: 1 } as Box<Bar>;
let (tx, rx): (Sender<Box<Bar>>, Receiver<Box<Bar>>) = channel();
spawn(proc() {
tx.send(foo);
});
let sent = rx.recv();
sent.bar();
}
使用防鏽Nightlies版,這個失敗,出現以下消息:
traittest.rs:16:60: 16:67 error: instantiating a type parameter with an incompatible type
Box<Bar+'static>
, which does not fulfillSend
[E0144]traittest.rs:16 let (tx, rx): (Sender>, Receiver>) = channel();
我剪斷的休息所有這些行都抱怨沒有履行Send
。
此外,試圖發送一個普通的,unboxed特質對象導致了一堆其他錯誤,主要是抱怨不履行Send + Sized
。
對於Rust而言,我還是比較新的,所以我不確定是否有一些我錯過了。但我覺得沒有辦法說服編譯器製作特徵對象Send
。
如果目前尚不可能,那麼目前是否有任何可能允許未來進行的工作?
哦,這很簡單。我想我不太瞭解特質對象是如何處理的。所以這不是那種特質,它是潛在的對象,對吧?所以你只需要讓編譯器知道這個盒子裏有一些特質,這也正好符合'Send'的要求。我想我現在明白了。 – guff 2014-09-03 16:48:44