gpt4 book ai didi

rust - 为什么 std::borrow::Borrow 没有为每个类型实现?

转载 作者:行者123 更新时间:2023-11-29 08:28:12 25 4
gpt4 key购买 nike

在文档中指出

impl<T> Borrow<T> for T where
T: ?Sized,

我会读这个:

This Trait is implemented for every Type, even unsized ones.

这是正确的吗?

我收到错误信息:特质 std::borrow::Borrow<T>未针对 &num_complex::Complex<f64> 实现

我无法理解。

(我不想发布整个代码,我只是想澄清一下哪些类型实现了 std::borror::Borrow)

最佳答案

重要的是要认识到在毯子里 impl只有一个T并且它必须在两个地方代表相同类型:

impl<T> Borrow<T> for T
where T: ?Sized

为每种类型实现 T , 只有特定特征 Borrow<T> i64工具 Borrow<i64> , String工具 Borrow<String>等。当我们用 T = &num_complex::Complex<f64> 实例化它时, 实现了什么特征?

impl Borrow<&num_complex::Complex<f64>> for &num_complex::Complex<f64>  // (not compilable code, just illustrative)

换句话说,你可以借一个&Complex<f64> 作为 &Complex<f64> , 但你不能随意借用它 T (无论如何,这没有多大意义)。

您在一些通用代码中使用了它,其中 T可以是任何东西,所以毯子implBorrow<T> for T不适用。您可能可以通过添加特征界限来解决此问题:

where num_complex::Complex<f64>: Borrow<T>

这意味着Complex<f64>本身实现 Borrow<T> , 或者

where for<'a> &'a num_complex::Complex<f64>: Borrow<T>

这意味着对 Complex<f64> 的任何引用工具 Borrow<T> .根据您的实际代码,由于 autoref/autoderef,这两种方法之一或两者都可能起作用。

关于rust - 为什么 std::borrow::Borrow 没有为每个类型实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58672902/

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