rustc can“;推断适当的使用寿命”;对于给定的impl,而不是另一个impl
为令人困惑的标题道歉。。。如果有人想到一个更好的,请编辑这篇文章 我定义了这样一个特征:rustc can“;推断适当的使用寿命”;对于给定的impl,而不是另一个impl,rust,traits,lifetime,Rust,Traits,Lifetime,为令人困惑的标题道歉。。。如果有人想到一个更好的,请编辑这篇文章 我定义了这样一个特征: pub trait AsUrlParams where <Self::I as IntoIterator>::Item: Borrow<(Self::K, Self::V)>, { type I: IntoIterator; type K: AsRef<str>; type V: AsRef<str>; fn as_u
pub trait AsUrlParams
where <Self::I as IntoIterator>::Item: Borrow<(Self::K, Self::V)>,
{
type I: IntoIterator;
type K: AsRef<str>;
type V: AsRef<str>;
fn as_url_params(&self) -> Self::I;
}
fn as_url_params<'b>(self: &'b &'a mut Vec<(T, U)>) -> &'a mut Vec<(T, U)> {
*self
}
我有两个问题:
- 有没有一种方法可以为
实现这种特性和'mut-Vec
- 为什么我没有为
点击此错误?从我一生的角度来看,它看起来完全一样:和'a Vec
的内容是&self
,它比&Vec
更有效&self
pub trait AsUrlParams
where <Self::I as IntoIterator>::Item: Borrow<(Self::K, Self::V)>,
{
type I: IntoIterator;
type K: AsRef<str>;
type V: AsRef<str>;
fn as_url_params(&self) -> Self::I;
}
fn as_url_params<'b>(self: &'b &'a mut Vec<(T, U)>) -> &'a mut Vec<(T, U)> {
*self
}
在这种情况下,我们得到一个类型为
和'a Vec
的对象,该对象具有相同的借用限制-但是由于和'a T
实现了复制
,我们返回它的新副本。(它实现Copy
的原因-中间借用是否结束无关紧要-我们知道存在一个使用寿命'a
的不可变引用,因此在'a
结束之前,对象不能以任何方式更改。)让我们比较这两个函数签名。第二个是这样的:
pub trait AsUrlParams
where <Self::I as IntoIterator>::Item: Borrow<(Self::K, Self::V)>,
{
type I: IntoIterator;
type K: AsRef<str>;
type V: AsRef<str>;
fn as_url_params(&self) -> Self::I;
}
fn as_url_params<'b>(self: &'b &'a mut Vec<(T, U)>) -> &'a mut Vec<(T, U)> {
*self
}
在这种情况下,我们得到一个类型为
和'a Vec
的对象,该对象具有相同的借用限制-但是由于和'a T
实现了复制
,我们返回它的新副本。(它实现Copy
的原因-中间借用是否结束无关紧要-我们知道存在一个使用寿命'a
的不可变引用,因此在'a
结束之前,对象不能以任何方式更改。)链接的问题对您有帮助吗?我认为这两个问题是同一个问题。但是,您还有另一个问题:您想从和&mut
(第二次impl的方法中的self
类型)获得&mut Vec
(第二次impl中的I
类型),这是不可能的。这两个问题的答案是:按方法中的值获取self
。如果这一切对你没有帮助,请让我们知道@卢卡斯卡尔伯托德感谢您的链接。我认为这确实可以归结为同一个问题。我确实按照你的建议解决了我的问题:用self
而不是&self
。谢谢!链接的问题对你有帮助吗?我认为这两个问题是同一个问题。但是,您还有另一个问题:您想从和&mut
(第二次impl的方法中的self
类型)获得&mut Vec
(第二次impl中的I
类型),这是不可能的。这两个问题的答案是:按方法中的值获取self
。如果这一切对你没有帮助,请让我们知道@卢卡斯卡尔伯托德感谢您的链接。我认为这确实可以归结为同一个问题。我确实按照你的建议解决了我的问题:用self
而不是&self
。谢谢!