Rust中标准库中类型的trait实现的范围是什么?

Rust中标准库中类型的trait实现的范围是什么?,rust,Rust,铁锈书上说: 我们还可以在我们的聚合器机箱中对Vec执行Summary, 因为特征摘要是我们的聚合器板条箱的本地特征 如果我的包使用crates.io中的另一个板条箱,如rand,并且rand在标准库中的类型上实现了一个特征,如Vec,我的代码是否能够看到这些方法 我知道有一个限制,一个特质必须在你使用它的方法的范围内。如果rand在Vec上实现了一个自定义特征,并且我试图在我的板条箱中使用该特征中的一个方法,编译器会告诉我在使用这些方法之前需要从rand导入该特征,还是会告诉我这些方法不存在

铁锈书上说:

我们还可以在我们的
聚合器
机箱中对
Vec
执行
Summary
, 因为特征
摘要
是我们的
聚合器
板条箱的本地特征

如果我的包使用crates.io中的另一个板条箱,如
rand
,并且
rand
在标准库中的类型上实现了一个特征,如
Vec
,我的代码是否能够看到这些方法


我知道有一个限制,一个特质必须在你使用它的方法的范围内。如果
rand
Vec
上实现了一个自定义特征,并且我试图在我的板条箱中使用该特征中的一个方法,编译器会告诉我在使用这些方法之前需要从
rand
导入该特征,还是会告诉我这些方法不存在?如果是前者,如果我从
rand
导入特征,那么我可以在
Vec
上使用这些方法吗?

根据我的实验,如果一个板条箱在一个外来类型上实现了一个特征,那么可以使用正常规则访问该特征(也就是说,为了调用该特性的方法,您必须将其引入范围,否则,不需要任何特殊的操作)

例如,考虑CRATE,它提供了序列化和反序列化数据的工具。它提供了特性,并且允许数据结构定义它们是如何序列化和反序列化为各种格式的。此外,它提供了许多内置和STD类型的这些特性的实现(见和)。.我做了一个快速的实验,我的代码可以使用这些特性,而无需我做任何额外的事情(事实上,正如你所看到的,因为我从不直接使用这些特性,所以我甚至不必将它们引入范围)

因此,据我所知,您的问题的答案是肯定的,您的代码可以使用由
rand
Vec
实现的特征。您需要做的就是从
rand
导入该特征