为什么 String::find 不是 &str 上的方法?
Why is String::find not a method on &str?
我最近注意到 String::find
实际上是一个拥有的 String
上的方法。
但我不明白为什么它不只是 &str
上的一个方法,而是让它在更多情况下有用(并且仍然对 String
有用)。我是不是漏掉了为什么会这样,还是只是一个历史事故?
显然,文档让您感到困惑。此方法在本节下列出:
所以它甚至没有为 String
实现,但实际上只是 for &str
。
实际上它只适用于 String
因为它 Deref
到 str
:
Methods from Deref<Target=str>
您不会在 the source for String, but in the source for str
中找到它。
实际上...你错了:它不是 String
方法。
您正在查看的是str::find
。
碰巧 Rust 文档在 String
页面上自动包含了 String
将 Deref<Target=str>
实现为 can be seen here 的事实带来的方法。
为什么文档包含可以在 Deref
的目标上调用的方法?
因为您实际上可以直接在 String
对象上调用它们,因为如果编译器找不到您正在调用的方法,编译器将自动遵循 Deref
递归。
我最近注意到 String::find
实际上是一个拥有的 String
上的方法。
但我不明白为什么它不只是 &str
上的一个方法,而是让它在更多情况下有用(并且仍然对 String
有用)。我是不是漏掉了为什么会这样,还是只是一个历史事故?
显然,文档让您感到困惑。此方法在本节下列出:
所以它甚至没有为 String
实现,但实际上只是 for &str
。
实际上它只适用于 String
因为它 Deref
到 str
:
Methods from Deref<Target=str>
您不会在 the source for String, but in the source for str
中找到它。
实际上...你错了:它不是 String
方法。
您正在查看的是str::find
。
碰巧 Rust 文档在 String
页面上自动包含了 String
将 Deref<Target=str>
实现为 can be seen here 的事实带来的方法。
为什么文档包含可以在 Deref
的目标上调用的方法?
因为您实际上可以直接在 String
对象上调用它们,因为如果编译器找不到您正在调用的方法,编译器将自动遵循 Deref
递归。