【问题标题】:Why is String::find not a method on &str?为什么 String::find 不是 &str 上的方法?
【发布时间】:2017-02-18 02:57:01
【问题描述】:

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

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

【问题讨论】:

    标签: string rust slice


    【解决方案1】:

    其实……你错了:这不是String方法。

    您正在查看的是str::find

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


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

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

    【讨论】:

      【解决方案2】:

      实际上它只适用于String,因为它是Derefs 到str

      Methods from Deref<Target=str>
      

      您不会在 the source for String 中找到它,而是在 the source for str 中。

      【讨论】:

        【解决方案3】:

        显然,文档让您感到困惑。此方法列在此部分下:

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

        【讨论】:

        • 秒杀我:D.
        • 啊,原来如此。很难看到当有这么多方法时,我一直对str、原始str 和模块有两个文档页面感到困惑。
        猜你喜欢
        • 2015-02-16
        • 1970-01-01
        • 2021-11-07
        • 1970-01-01
        • 1970-01-01
        • 2019-02-12
        • 1970-01-01
        • 2019-12-23
        • 1970-01-01
        相关资源
        最近更新 更多