Rust 从机箱切换<;T>;至Rc<;T>;对于像Cons list这样的方案';不编译

Rust 从机箱切换<;T>;至Rc<;T>;对于像Cons list这样的方案';不编译,rust,match,refcounting,Rust,Match,Refcounting,如果将Rc替换为Box,则下面的程序将编译并运行。为什么在使用引用计数时它不编译?这是一个关于Rc和Box之间区别的问题 解决办法似乎是更换 *v.clone() 与 然后添加行 use::ops::Deref; 我相信你的问题的答案是:“因为盒子是特别的”。如果你不同意,请用你的问题来解释不同之处。否则,我们可以将此问题标记为已回答。Rc和Box之间的区别-是的,*v为什么不起作用?前缀*不是std::ops::Deref的语法吗?*是其他类型的deref操作吗?关于上面的评论,是的,这对

如果将
Rc
替换为
Box
,则下面的程序将编译并运行。为什么在使用引用计数时它不编译?这是一个关于
Rc
Box
之间区别的问题


解决办法似乎是更换

*v.clone()

然后添加行

use::ops::Deref;

我相信你的问题的答案是:“因为盒子是特别的”。如果你不同意,请用你的问题来解释不同之处。否则,我们可以将此问题标记为已回答。
Rc
Box
之间的区别-是的,
*v
为什么不起作用?前缀
*
不是
std::ops::Deref
的语法吗?
*
是其他类型的deref操作吗?关于上面的评论,是的,这对我来说是有意义的。但由于某些原因,情况并非如此。一、 也需要解释。
Deref
作为
*
调用时,其行为不同(移出Deref)-请参阅。或者,您通常可以使用
&*
取消引用并重新箭头,因此该行也可以替换为
(&**v).clone()
(使用额外的
*
撤消
参考v
)。(有时rustc会建议
&*
,但在这种情况下它可能无法识别双deref。)是的,我验证了上述工作。谢谢你的解释。
Rc::deref(v).clone()
use::ops::Deref;