gpt4 book ai didi

rust - 一个不接受任何参数的方法的显式生命周期有什么意义?

转载 作者:行者123 更新时间:2023-11-29 08:10:14 27 4
gpt4 key购买 nike

Programming Rust 的第 295 页上您可以找到以下内容:

Fortunately, the standard library includes the blanket implementation:

impl<'a, T, U> AsRef<U> for &'a T
where
T: AsRef<U>,
T: ?Sized,
U: ?Sized,
{
fn as_ref(&self) -> &U {
(*self).as_ref()
}
}

我对那里使用 &'a 感到困惑。那是什么背景?它既没有在 as_ref 的参数中使用,也没有绑定(bind)到 &U 的输出。在这种情况下,我不认为我完全理解生命周期。

我查了一下这个,因为我仍然不明白它,而且答案仍然没有点击(有意义)。我找到了 convert.rs .这似乎在任何地方都没有任何 生命周期,但它实现了AsRef 特性。那么为什么这本书有这个,而不是 Rust 中的实际代码?哪里可以找到书中提到的“一揽子实现”?

最佳答案

It's not being used in an argument of as_ref

肯定是。该函数使用简写符号,可以扩展:

fn as_ref(&self) // becomes
fn as_ref(self: &Self) // becomes
fn as_ref(self: &&'a T)

nor tied to the output of &U

正确。

So why does the book have this, and not the actual code in Rust?

Rust 每 6 周发布一次新的稳定版本。大概这本书没有,所以他们很可能使用的是旧版本的 Rust。希望这本书告诉您他们开发的版本。

作为E_net4 already stated ,在这种情况下指定 'a 的要求在 Rust 1.31 中被删除,如 documented in the edition guide .

您在书中提供的代码与 found in Rust 1.30 匹配:

impl<'a, T: ?Sized, U: ?Sized> AsRef<U> for &'a T where T: AsRef<U>
{
fn as_ref(&self) -> &U {
<T as AsRef<U>>::as_ref(*self)
}
}

你看过的源代码corresponds to Rust 1.37 :

impl<T: ?Sized, U: ?Sized> AsRef<U> for &T where T: AsRef<U>
{
fn as_ref(&self) -> &U {
<T as AsRef<U>>::as_ref(*self)
}
}

这大约是 42 周的开发时间,足以更改源代码。

关于rust - 一个不接受任何参数的方法的显式生命周期有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58030348/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com