在Rust的官方书籍16-11中,它通过
let (tx, rx) = mpsc::channel();
let tx1 = mpsc::Sender::clone(&tx);
但是我尝试过
let (tx, rx) = mpsc::channel();
let tx1 = tx.clone();
这也有效。它们之间有什么区别?如果它们本质上相同,为什么考虑我们已经有了通用clone()
方法而创建一个单独的方法呢?
的功能签名clone
如下所示。请注意,它&self
作为参数:
fn clone(&self) -> Sender<T>;
您可以通过显式传递来调用该函数&self
:
mpsc::Sender::clone(&tx);
或通过使用方法调用表达式:
tx.clone();
方法调用表达式只是语法糖,尽管编译器确实必须执行更复杂的查找过程才能生成的正确引用类型self
。
请注意,这可与采用self
以下方法的任何其他关联方法一起使用:
pub struct Bar {}
impl Bar {
fn bla(&self) {}
}
fn main() {
let bar = Bar {};
// these are equivalent
bar.bla();
Bar::bla(&bar)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句