gpt4 book ai didi

string - 如何在单个函数中接受&str、String 和&String?

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

我想编写一个函数,它接受一个&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);
}

是否可以实现一个功能以便我可以这样做:

accept_all_strings(str_foo);
accept_all_strings(&string_foo);
accept_all_strings(string_foo);

最佳答案

您可以使用 AsRef<str> 特点:

// will accept any object that implements AsRef<str>
fn print<S: AsRef<str>>(stringlike: S) {
// call as_ref() to get a &str
let str_ref = stringlike.as_ref();

println!("got: {:?}", str_ref)
}

fn main() {
let a: &str = "str";
let b: String = String::from("String");
let c: &String = &b;

print(a);
print(c);
print(b);
}

print函数将支持任何实现 AsRef<str> 的类型, 其中包括 &str , String&String .

关于string - 如何在单个函数中接受&str、String 和&String?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55079070/

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