如何将a String转换为&str?更具体地说,我想将它转换为str带有staticlifetime(&'static str)的a.
这看起来微不足道,但我找不到办法.
例如,
fn f(s: &[u8]) {}
pub fn main() {
let x = "a";
f(x)
}
Run Code Online (Sandbox Code Playgroud)
无法编译:
error: mismatched types:
expected `&[u8]`,
found `&str`
(expected slice,
found str) [E0308]
Run Code Online (Sandbox Code Playgroud)
但是,文件指出:
strs的实际表示具有与切片的直接映射:&str与&[u8]相同.
.to_string()当我需要一个字符串时,有什么方法可以避免调用吗?例如:
fn func1(aaa: String) -> ....
Run Code Online (Sandbox Code Playgroud)
而不是
func1("fdsfdsfd".to_string())
Run Code Online (Sandbox Code Playgroud)
我可以这样做:
func1(s"fdsfdsfd")
Run Code Online (Sandbox Code Playgroud) 我想编写一个函数,该函数接受“ str”,“ String”和借用的“&String”。
我编写了以下2个函数:
fn accept_str_and_ref_string(value: &str)
{
println!("value: {}", value);
}
fn accept_str_and_string<S: Into<String>>(value: S)
{
let string_value: String = value.into();
println!("string_value: {}", string_value);
}
fn main() {
let str_foo = "foo";
let string_foo = String::from("foo");
accept_str_and_ref_string(str_foo);
accept_str_and_ref_string(&string_foo);
accept_str_and_string(str_foo);
accept_str_and_string(string_foo);
}
Run Code Online (Sandbox Code Playgroud)
但我想要1功能,所以我可以做到这一点:
accept_all_strings(str_foo);
accept_all_strings(&string_foo);
accept_all_strings(string_foo);
Run Code Online (Sandbox Code Playgroud)
这可能吗?