我已经尝试过几次尝试将东西传递给spawn
函数(以创建新的线程/任务)并让编译器告诉我这个问题error: cannot capture variable of type "blah blah", which does not fulfill "Send", in a bounded closure
。
是否有一种方法可以转换类型以实现“发送”,还是基于某些规则而固定?
例如,我可以ToStr
使用以下指令轻松实现特征:
#[deriving(ToStr, Rand)]
struct Point {
x: int,
y: int,
}
我可以为Send
特质做一些类似的事情吗?还是“别样”的性格受到不同的对待?
这是此问题的具体示例-是否有解决方法?
fn create_process_options(cmdinfo: &CmdInfo) -> (ProcessOptions, Option<FileDesc>) {
// ... omitted
}
// "po" is of type std::run::ProcessOptions
let (po, filedesc_opt) = create_process_options(&cmdinfo);
spawn(proc() {
let mut ps = Process::new(cmdinfo.program, cmdinfo.args, po).expect("darn");
ps.finish();
});
编译器错误:
error: cannot capture variable of type `std::run::ProcessOptions<>`, which does not fulfill `Send`, in a bounded closure
let mut process = Process::new(cmdinfo.program, cmdinfo.args, po).expect("darn");
^~
note: this closure's environment must satisfy `Send`
let mut process = Process::new(cmdinfo.program, cmdinfo.args, po).expect("darn");
发送是一种生锈的种类,您提到的其他内容是特征。虽然两者都可以用来绑定泛型,但实际上它们是完全不同的。您必须选择加入特征,但是根据其内容推断出类型的种类-除了更改内容之外,您不能更改类型的种类。
对于大多数种类,规则是“如果X的所有成员均为种类Y,则类型X为种类Y”。
在这种情况下,由于要发送,则需要您满足'static
,这意味着它们不包含任何非'static
引用。由于ProcessOptions
包含非静态生命周期Option<&'a Path>
,例如克里斯·摩根在其评论中详细介绍的,因此ProcessOptions
不符合发送条件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句