这两种为 Rust 通道克隆发送者的方式有什么区别?
What's the differences between these two ways of cloning a sender for a Rust channel?
在Rust官方书籍16-11中,通过
复制了一个channel sender
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)
}
在Rust官方书籍16-11中,通过
复制了一个channel senderlet (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)
}