struct - 如何为包含引用的结构实现 AsRef
问题描述
如果我有一个包含如下引用的结构:
struct Struct<'a> {
reference: &'a str
}
如何为 Struct 实现 AsRef?我试过这个:
impl<'a> AsRef<Struct<'a>> for Struct<'a> {
fn as_ref(&self) -> &Struct {
self
}
}
但它无法满足编译器要求:
由于要求冲突,无法为泛型类型中的生命周期参数推断适当的生命周期
解决方案
编译器必须在fn as_ref(&self) -> &Struct
返回类型中推断(隐式)泛型生命周期并且无法这样做。编译器期待一个Struct<'a>
,但签名承诺一个免费参数。这就是为什么你得到
expected fn(&Struct<'a>) -> &Struct<'a>
found fn(&Struct<'a>) -> &Struct<'_> // '_ is some anonymous lifetime,
// which needs to come from somewhere
解决方案是修改签名以返回Struct<'a>
而不是Struct
. 更短更清晰:
impl<'a> AsRef<Struct<'a>> for Struct<'a> {
fn as_ref(&self) -> &Self { // Self is Struct<'a>, the type for which we impl AsRef
self
}
}
推荐阅读
- assembly - 加载扇区后运行内核
- python - 如何使用 CEFPython 在 Tkinter 窗口中添加 WebBrowser 小部件?
- python - 从熊猫数据框中的文本中检索子字符串
- node.js - Node.JS 服务器中的 Socket.IO 没有响应
- python - 如何在自定义 keras 模型中添加 tf.keras.Input?
- regex - 如何在vim中删除一个单词后的所有内容
- java - 如何在 android java 中加载活动?
- python - 使用正则表达式从许多列名中删除句点
- javascript - 来自前端的数据在后端重复两次 React.js Node.js
- python - 从文本文件中读取的列表中匹配单词的问题