如何在单个函数中接受& str,String和& String? [英] How to accept &str, String and &String in a single function?
本文介绍了如何在单个函数中接受& str,String和& String?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想编写一个函数,该函数接受& str
, String
和借用的& String
。我已经编写了以下2个函数:
I want to write a single function, that accepts a &str
, a String
and a borrowed &String
. I've written the following 2 functions:
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);
}
是否可以实现一个功能,这样我就可以做到:
Is it possible to implement one function so that I can do this:
accept_all_strings(str_foo);
accept_all_strings(&string_foo);
accept_all_strings(string_foo);
推荐答案
您可以使用 AsRef< str>
特征:
You can use the AsRef<str>
trait:
// 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
。
The print
function will support any type that implements AsRef<str>
, which includes &str
, String
and &String
.
这篇关于如何在单个函数中接受& str,String和& String?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文