【问题标题】:Calling method on subslice without reference在没有参考的情况下调用子切片上的方法
【发布时间】:2019-08-03 23:09:15
【问题描述】:

通常在 Rust 中,您不能在不获取局部变量引用的情况下将某事物的(子)切片分配给局部变量,因为 str 的大小未知:

let s = "hello";
let x = s[..]; // doesn't compile
let y = &s[..]; // ok

但是,我注意到您可以直接在切片上调用方法:

let x = s[..].to_owned(); // ok
let y = (&s[..]).to_owned(); // ok

这两种方式在语义和性能方面有什么区别吗?

【问题讨论】:

    标签: methods reference rust


    【解决方案1】:

    这是由于 Rust 的自动引用规则。当你调用一个在值而不是引用上接受&self(例如to_owned)的方法时,Rust 会自动接受引用以调用该方法。

    代码可以编译,因为除了通过引用之外,永远不会访问未调整大小的类型。

    【讨论】:

      猜你喜欢
      • 2011-12-26
      • 1970-01-01
      • 2023-02-08
      • 2021-11-18
      • 2018-05-08
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多