Я ожидал, что это работает:Почему ржавчина требует, чтобы передаваемые черты явно помечены как «Отправить»?
trait Foo: Send { fn ok(&self) -> int; }
struct IsFoo;
impl Foo for IsFoo { fn ok(&self) -> int { return 1; } }
struct Bar { v: Option<Box<Foo>> }
fn main() {
let bar = Bar { v: Some(box IsFoo as Box<Foo>) };
spawn(proc() {
match bar.v {
Some(ref foo) => {
assert!(foo.ok() == 1);
}
_ => { fail!("Unreachable"); }
}
});
}
манеж: http://is.gd/ORxeRL
... но это не так.
Вместо этого компилятор неловко требует отправки признака явно устанавливать на ссылки признака:
struct Bar { v: Option<Box<Foo + Send> + Send> } <--- + Send + Send much?
fn main() {
let bar = Bar { v: Some(box IsFoo as Box<Foo + Send>) }; <---
Foo Foo является: Отправить; так что ... я, очевидно, хочу, чтобы он был отправимым. Зачем требовать явные + отправки?
ie. Это ошибка компилятора?
Или есть какое-то оправдание для требовательности этого многословия?
Вам не нужно 'Option + Отправить>', но только 'Option >' в определении структуры. –
Levans