【问题标题】:Returning a string from a method in Rust从 Rust 中的方法返回字符串
【发布时间】:2014-04-11 21:00:04
【问题描述】:

编者注:此问题中的语法早于 Rust 1.0,1.0 更新的语法会产生不同的错误,但总体概念在 Rust 1.0 中仍然相同。

我有一个带有name 字段的结构T,我想从name 函数返回该字符串。我不想复制整个字符串,只复制指针:

struct T {
     name: ~str,
}

impl Node for T {
     fn name(&self) -> &str { self.name }
     // this doesn't work either (lifetime error)
     // fn name(&self) -> &str { let s: &str = self.name; s }
}

trait Node {
     fn name(&self) -> &str;
}

为什么会这样?从函数返回 &str 的最佳方法是什么?

【问题讨论】:

    标签: rust


    【解决方案1】:

    您必须引用self.name 并确保&self&str 的生命周期相同:

    struct T {
        name: String,
    }
    
    impl Node for T {
        fn name<'a>(&'a self) -> &'a str {
            &self.name
        }
    }
    
    trait Node {
        fn name(&self) -> &str;
    }
    

    您也可以使用生命周期省略,如特征定义中所示。在这种情况下,它会自动将self 和返回的&amp;str 的生命周期联系在一起。

    看看这些书的章节:

    【讨论】:

    • 所以我得到了它与fn name&lt;'a&gt;(&amp;'a self) -&gt; &amp;'a str { let s: &amp;'a str = self.name; s } 一起工作,没有 let 绑定有什么办法吗?
    • 我在我的记忆中, ~ to & conversioon 工作,也许被改变了(或者总是只是为了功能参数?),你只需要调用 as_slice
    • @cloudhead,对于字符串或拥有的向量 (~[T]),您必须调用 as_slice()。对于其他盒装类型&amp;*value 就足够了。当动态大小的类型出现时,这可能会改变。
    猜你喜欢
    • 2017-08-22
    • 2018-05-11
    • 2016-05-19
    • 1970-01-01
    • 2015-03-29
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多