gpt4 book ai didi

rust - 如何将字符串转换为 &'static str

转载 作者:行者123 更新时间:2023-11-29 07:40:04 28 4
gpt4 key购买 nike

如何将 String 转换为 &str?更具体地说,我想将其转换为具有 static 生命周期 (&'static str) 的 str

最佳答案

针对 Rust 1.0 进行了更新

您无法获得&'static str来自String因为String s 可能不会在程序的整个生命周期中都存在,这就是 &'static一生的意思。只能得到String参数化的切片自己的一生。

String 开始一片&'a str您可以使用切片语法:

let s: String = "abcdefg".to_owned();
let s_slice: &str = &s[..]; // take a full slice of the string

或者,您可以使用 String工具 Deref<Target=str>并执行显式重新借用:

let s_slice: &str = &*s;  // s  : String 
// *s : str (via Deref<Target=str>)
// &*s: &str

甚至还有另一种方法允许更简洁的语法,但它只能在编译器能够确定所需的目标类型时使用(例如,在函数参数或显式类型的变量绑定(bind)中)。它被称为deref 强制,它只允许使用&。运算符,编译器会自动插入适量的* s 基于上下文:

let s_slice: &str = &s;  // okay

fn take_name(name: &str) { ... }
take_name(&s); // okay as well

let not_correct = &s; // this will give &String, not &str,
// because the compiler does not know
// that you want a &str

请注意,此模式对于 String 不是唯一的/&str - 您可以将它用于通过 Deref 连接的每一对类型,例如 CString/CStrOsString/OsStr来自 std::ffi 模块或 PathBuf/Path来自 std::path 模块。

关于rust - 如何将字符串转换为 &'static str,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23975391/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com