Rust 如何通过以特征为参照的圆弧?
如何传递对Rust 如何通过以特征为参照的圆弧?,rust,clippy,Rust,Clippy,如何传递对Arc)的引用 如果我省略了引用,它可以编译,但Clippy警告我,在这种情况下,没有任何意义 上的Clippy错误: 编译操场v0.0.1(file:///playground) 警告:此参数通过值传递,但不会在函数体中使用 -->src/main.rs:13:10 | 13 | fn不锈钢(a:Arc){ 帮助:考虑引用一个参考词:“和ARC” | =注意:#[警告(无需按值传递)]默认打开 =帮助:有关更多信息,请访问https://rust-lang-nursery.githu
Arc)的引用
如果我省略了引用,它可以编译,但Clippy警告我,在这种情况下,没有任何意义
上的Clippy错误:
编译操场v0.0.1(file:///playground)
警告:此参数通过值传递,但不会在函数体中使用
-->src/main.rs:13:10
|
13 | fn不锈钢(a:Arc){
帮助:考虑引用一个参考词:“和ARC”
|
=注意:#[警告(无需按值传递)]默认打开
=帮助:有关更多信息,请访问https://rust-lang-nursery.github.io/rust-clippy/v0.0.186/index.html#needless_pass_by_value
您可以将引用传递给Arc
的内容
fn ss(a: &A) {
a.send();
}
fn main() {
let a = Arc::new(B);
ss(&*a);
}
嗯,最简单的解决方法就是忽略Clippy。Clippy中的许多lint不在基本编译器中,因为它们可能是错误的或不适用的。此外,Arc
已经是一种参考,使用&Arc
(或&Rc
)很少有意义
其次,正如red75prime所指出的,您可以将函数改为采用&A
最后,如果你真的想安抚Clippy,你可以照上面说的做:
fn main() {
let a = Arc::new(B);
{ let a: Arc<A> = a.clone(); ss(&a); }
}
fn main(){
设a=Arc::new(B);
{设a:Arc=a.clone();ss(&a);}
}
必须这样做的原因是,您只能强制“最外层”的间接寻址。let
将弧
强制为弧
,然后创建指向它的指针
如果有某种原因ss
需要它的参数是Arc
(例如克隆它),只需忽略Clippy或禁用该lint。如果没有原因ss
需要它的参数是Arc
(您只需要它里面的内容),则将ss
改为使用&A
最后一段主要是为了完整性。我想在最后一段的旁边加上一句——如果
ss
总是需要克隆Arc
,它可能只需要按值获取Arc
,让调用者决定是否需要克隆。
fn main() {
let a = Arc::new(B);
{ let a: Arc<A> = a.clone(); ss(&a); }
}