rust - 可以从 `implfor &'static str` (static impl) 替换 `impl<'a> 来自对于 &'a str`(通用 impl)?
问题描述
鉴于以下条件:
/// Zero Sized Type
struct ZST;
/// What the ZST converts into
const TEXT: &str = "target text";
下面的代码片段做同样的事情,至少表面上是这样:
// static impl
impl From<ZST> for &'static str {
fn from(_: ZST) -> &'static str {
TEXT
}
}
// generic impl
impl<'a> From<ZST> for &'a str {
fn from(_: ZST) -> &'a str {
TEXT
}
}
我的问题是:
- 它们完全一样吗?如果不是,有什么区别?
- 哪个版本需要更多时间来编译?
解决方案
由于引用是不可变的并且处于返回位置,因此它们是相同的。也就是说,您可以将 a 分配给&'static str
需要 a&'a str
的任何生命周期的变量'a
。同样,这些中的任何一个都可以分配给需要较短生命周期的变量,因为具有较长生命周期的引用是子类型。
事实上,唯一可能的实现方式impl<'a> From<ZST> for &'a str
是返回一个静态的。那是因为它必须适用于任何'a
,并且唯一满足的生命周期是'static
。
至于编译时间的差异,它永远不会足够担心。
推荐阅读
- javascript - 如何在具有不同 CSS 的不同文件中多次使用相同的组件
- java - 在约束布局上设置最大高度
- javascript - 反应检查 Const 是否为空
- nlp - 使用 Pytorch 生成 LSTM 文本
- mkdocs - 如何避免 mkdocs/mkdocs-material 中的 html 转义
- android-jetpack-compose - 如何在 Jetpack Compose 中创建编辑器?
- python - 如何对特征矩阵进行行归一化?广播错误
- python - Django mysql数据库在模板问题的for循环中显示来自多个表的数据
- azure - Azure Function On-Prem 在断开连接模式下运行
- android - 在本机反应中,键盘在文本输入中键入的每个字符都会消失