Memory 我如何将一个拥有的盒子发送到子任务? fn main(){ 设muti=~100; let(端口2,通道2):(端口,通道)=流(); chan2.发送(i); 不产卵{ 设i=port2.recv(); println(格式!(“==jcpark==i{:?}\n”,i)); } }
如果Memory 我如何将一个拥有的盒子发送到子任务? fn main(){ 设muti=~100; let(端口2,通道2):(端口,通道)=流(); chan2.发送(i); 不产卵{ 设i=port2.recv(); println(格式!(“==jcpark==i{:?}\n”,i)); } },memory,task,rust,Memory,Task,Rust,如果让mut i=100,则上述代码有效。但是如果i是一个自有的框,它就不起作用。 您能告诉我如何处理吗?您已明确定义流的类型为int,因此您只能发送int。如果将其设置为~int(通过将类型更改为(Port,Chan)),则可以发送~int 目前,stream的通用参数是从定义的port2和chan2类型推断出来的;事实上,可以从send和recv调用推断出来的,因此实际上不需要在任何地方编写int或~int fn main() { let mut i=~100;
让mut i=100
,则上述代码有效。但是如果i
是一个自有的框,它就不起作用。
您能告诉我如何处理吗?您已明确定义流的类型为
int
,因此您只能发送int
。如果将其设置为~int
(通过将类型更改为(Port,Chan)
),则可以发送~int
目前,stream
的通用参数是从定义的port2
和chan2
类型推断出来的;事实上,可以从send
和recv
调用推断出来的,因此实际上不需要在任何地方编写int
或~int
fn main() {
let mut i=~100;
let (port2, chan2) :(Port<int>, Chan<int>) = stream();
chan2.send(i );
do spawn {
let i=port2.recv();
println(format!("==jcpark== i {:?} \n",i ));
}
}
顺便说一句,对于像
int
这样小的类型,您很少需要使用~
;它是在递归数据结构之外使用的(或者当trait对象需要时)应该限制为非常大的值,实际的基准测试表明这是一种性能改进。通常,~T
和T
的行为相同,只是前者在指针后面,并且总是有一个析构函数。具体来说,它们都具有相同的“属性”,这意味着您不需要~
就可以在任务之间发送它。(请注意,~[]
和~str
不是“真实的”~
框,因此不属于上述讨论的一部分。)(事实上,拥有一个~
并不会使一个值自动可发送;~t
是可发送的,当且仅当普通t
是可发送的。)
fn main() {
let i = ~100;
let (port2, chan2) = stream();
chan2.send(i);
do spawn {
let i = port2.recv();
println!("==jcpark== i {:?} \n", i);
}
}