这两种克隆 Rust 通道发送器的方法有什么区别?



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

最新更新