如何在一个函数中接受&str,String和&String?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在一个函数中接受&str,String和&String?相关的知识,希望对你有一定的参考价值。
我想写一个单一函数,接受一个 &str
, a String
和借来的 &String
. 我写了以下两个函数。
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
.
以上是关于如何在一个函数中接受&str,String和&String?的主要内容,如果未能解决你的问题,请参考以下文章
我应该如何使用&str,Option和String编组Rust函数并在C#中使用它?