rust - 这两种为 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)
}
推荐阅读
- php - html标签作为变量的一部分输出
- angular - 条件重定向不同的布局角度4
- sql-server - 在 C# 中捕获嵌套存储过程的输出
- php - php脚本作为cron作业运行时会产生致命错误,但从浏览器运行时会给出正确的结果
- c - c中的格式说明符值问题
- android - 默认的 kotlin IDE,但我想要它在 Java 中,以便我可以跟随
- php - preg_match 错误?
- drupal - Drupal 7 给出不正确的模块丢失消息
- javascript - 有效时匹配数字和破折号的正则表达式
- bash - 如何为 Mac 交换 CMD 和 Control,但仅限于 zsh/bash