【问题标题】:Static call of non-static methods非静态方法的静态调用
【发布时间】:2020-08-07 05:48:32
【问题描述】:

出于各种原因,我喜欢像调用静态方法一样调用常规方法,例如,不使用点符号。 (例如,Vec::len( &v ) 而不是v.len()。)我总是可以用我自己的方法做到这一点;但是,对于某些属于标准库的方法,由于某种原因我不能这样做。例如,Vec::binary_search( &v, &t ) 不会编译(“在当前范围内没有为结构 std::vec::Vec<_> 找到名为 binary_search 的函数或关联项”),即使 v.binary_search( &t ) 编译也是如此。这是为什么呢?

【问题讨论】:

    标签: methods rust


    【解决方案1】:

    那是因为binary_search is a method of slices, not of Vec

    它在 Vec 上可用,因为 Vec derefs to slice 和方法调用 auto-deref(这也是为什么您可以在 Box<T>&T 上调用 T 的方法,尽管这些方法没有实现在Box 或参考资料上)。

    【讨论】:

      【解决方案2】:

      binary_search 未在 Vec 中实现。由于Deref<Target=[T]>binary_search is implemented on [T],调用v.binary_search(...) 有效。

      下面是让它作为关联函数工作的方法。

      <[_]>::binary_search(&v, &t);
      

      【讨论】:

        猜你喜欢
        • 2013-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-08
        • 1970-01-01
        • 2016-10-04
        • 1970-01-01
        相关资源
        最近更新 更多