【发布时间】:2017-02-18 02:57:01
【问题描述】:
我最近注意到String::find 实际上是一个拥有的String 上的方法。
但我不明白为什么它不仅仅是&str 上的一个方法,而是让它在更多情况下有用(并且仍然对String 有用)。我错过了为什么会这样的原因,还是只是一个历史事故?
【问题讨论】:
我最近注意到String::find 实际上是一个拥有的String 上的方法。
但我不明白为什么它不仅仅是&str 上的一个方法,而是让它在更多情况下有用(并且仍然对String 有用)。我错过了为什么会这样的原因,还是只是一个历史事故?
【问题讨论】:
其实……你错了:这不是String方法。
您正在查看的是str::find。
碰巧,Rust 文档自动在 String 页面上包含了由于 String 将 Deref<Target=str> 实现为 can be seen here 所带来的方法。
为什么文档中包含可以在Deref的目标上调用的方法?
因为您实际上可以直接在 String 对象上调用它们,因为如果编译器找不到您正在调用的方法,它将自动递归地跟随 Deref。
【讨论】:
实际上它只适用于String,因为它是Derefs 到str:
Methods from Deref<Target=str>
您不会在 the source for String 中找到它,而是在 the source for str 中。
【讨论】:
【讨论】:
str、原始str 和模块有两个文档页面感到困惑。