为什么String::find不是&str的方法?

3

我最近注意到String::find实际上是一个属于拥有所有权的String的方法。

但我不明白为什么它不直接成为&str的方法,这样可以在更多情况下使用(对于String仍然同样有用)。我是否忽略了造成此种情况的原因,还是这只是历史偶然?

3个回答

8
显然,文档让你感到困惑。这种方法列在这个部分下面:

Methods from Deref<Target=str>

因此,它甚至没有为String实现,而只是&str实现

1
秒杀我了 :D。 - ljedrz
1
哎呀,是这样的。当有很多方法时,很难看到这一点,而且我总是被str的两个文档页面所困扰,一个是原始的str,另一个是模块。 - Chris Emerson

5

实际上,它仅适用于String类型,因为它可以Derefstr类型:

Methods from Deref<Target=str>

你在 String 的源代码 中找不到它,但是你可以在 str 的源代码 中找到它。

5

实际上...你错了:这不是一个String的方法。

你所看到的是str::find

Rust文档自动将String页面中包含Deref<Target=str>实现的方法,因此它们可以通过这里查看。


为什么文档会包含可以在Deref目标上调用的方法?

因为你可以直接在String对象上调用它们,如果编译器找不到你调用的方法,则会递归地自动跟随Deref


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接