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

Why is String::find not a method on &str?

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

但我不明白为什么它不只是 &str 上的一个方法,而是让它在更多情况下有用(并且仍然对 String 有用)。我是不是漏掉了为什么会这样,还是只是一个历史事故?

显然,文档让您感到困惑。此方法在本节下列出:

所以它甚至没有为 String 实现,但实际上只是 for &str

实际上它只适用于 String 因为它 Derefstr:

Methods from Deref<Target=str>

您不会在 the source for String, but in the source for str 中找到它。

实际上...你错了:它不是 String 方法。

您正在查看的是str::find

碰巧 Rust 文档在 String 页面上自动包含了 StringDeref<Target=str> 实现为 can be seen here 的事实带来的方法。


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

因为您实际上可以直接在 String 对象上调用它们,因为如果编译器找不到您正在调用的方法,编译器将自动遵循 Deref 递归。