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);
    }
}