rust - 如何在 Rust 的 Impl block 中转换 &str 中的字符串

标签 rust

我是 Rust 的新手,为了更加熟悉这门语言,我开始编写一个小 ToDo 程序。

我已经创建了一个对应于任务的结构:

    struct Task {
        id: int,
        title: &'static str
    }

我尝试实现一些方法来直接获取格式化行以写入文件:

    impl Task {
        fn to_string (&self) -> String {
            let line = self.id.to_string() + "\t" + self.title;
            line
        }

        fn to_str (&self) -> &str {
            let line = self.to_string();
            let formatted_str : &str = line.as_slice();
            formatted_str
        }
    }

我收到一条错误消息,指出“线路”的生命周期不够长。我已尝试添加生命周期信息,如下所述:http://rustbyexample.com/lifetime/fn.html但我又遇到了同样的错误。

这种情况有解决办法吗?我是 Rust 的新手,所以我可能错过了一些东西。

感谢您的帮助!

最佳答案

这根本不可能。如果您返回对某物的引用,则该某物必须存储在某处。忽略任务本地存储和静态,这意味着只需要 &self 的方法它必须存储在 self 中.

您不能返回对您返回它的方法所拥有的东西的引用,因为当您返回对它的引用时,它会超出范围并被销毁。

让您的调用者调用 self.to_string().as_slice()如果他们需要一个字符串切片而不是一个拥有的字符串,他们自己。


顺便说一句,为了获得最佳结果,您应该实现 <a href="http://static.rust-lang.org/doc/master/std/fmt/index.html" rel="noreferrer noopener nofollow">std::fmt</a>::Show ;

use std::fmt;

impl fmt::Show for Task {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "{}\t{}", self.id, self.title)
    }
}

这会让你得到一个 .to_string() method自动,你可以使用你的Task直接在format!("{}", task)等等。

关于rust - 如何在 Rust 的 Impl block 中转换 &str 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24855830/

相关文章:

rust - 从 Actix Web 应用程序中间件访问应用程序状态

rust - 具有任意常量表达式的 cfg 属性

javascript - Rust wasm : How to access Webassembly. 当前实例的内存(来自 Rust)?

rust - 如何将字符转换为字符串?

rust - 为什么 ~/.cargo 目录这么大?

rust - 需要引用时有条件地克隆

string - 为什么 Rust 中的字符串文字是 &str 而不是 String?

syntax - 在 Rust 中分号是可选的吗?

rust - 如何在 Rust 中定义递归特征?

rust - 为什么我在子模块中需要 `use` 语句而不是在 main.rs 中?