如何将字符串传递给接受 Into<&str> 的方法?
How do I pass a String to a method accepting Into<&str>?
我正在尝试将 String
传递给 clap 的生成器方法:
extern crate clap; // 2.32.0
use clap::App;
const NAME: &'static str = "example";
const DESC_PART_1: &'static str = "desc";
const DESC_PART_2: &'static str = "ription";
fn main() {
let description: String = format!("{}{}", DESC_PART_1, DESC_PART_2);
let matches = App::new(NAME).about(description).get_matches();
}
我收到错误:
error[E0277]: the trait bound `&str: std::convert::From<std::string::String>` is not satisfied
--> src/main.rs:11:34
|
11 | let matches = App::new(NAME).about(description).get_matches();
| ^^^^^ the trait `std::convert::From<std::string::String>` is not implemented for `&str`
|
= note: required because of the requirements on the impl of `std::convert::Into<&str>` for `std::string::String`
如果我通过 &description
,我会得到类似的错误。我正在努力理解此错误的起源以及使用签名 pub fn about<S: Into<&'b str>>(self, about: S) -> Self
.
拍手的原因
使用 Into<&str>
的给定(异常)约束,编译器无法将 String
或 &String
直接转换为请求的字符串切片。对于字符串切片,From<String>
和 From<&String>
都没有这样的实现。从拥有的字符串或类似字符串的值到切片的转换通常是通过其他特征完成的。
相反,您可以:
- 使用
String::as_str()
,它始终提供 &str
;
- 从
AsRef
特征调用 as_ref()
,导致编译器为 String
; 选择实现 AsRef<str>
- 或重新借用字符串,从而强制转换为
&str
。
let matches = App::new(NAME).about(description.as_str()).get_matches(); // (1)
let matches = App::new(NAME).about(description.as_ref()).get_matches(); // (2)
let matches = App::new(NAME).about(&*description).get_matches(); // (3)
我正在尝试将 String
传递给 clap 的生成器方法:
extern crate clap; // 2.32.0
use clap::App;
const NAME: &'static str = "example";
const DESC_PART_1: &'static str = "desc";
const DESC_PART_2: &'static str = "ription";
fn main() {
let description: String = format!("{}{}", DESC_PART_1, DESC_PART_2);
let matches = App::new(NAME).about(description).get_matches();
}
我收到错误:
error[E0277]: the trait bound `&str: std::convert::From<std::string::String>` is not satisfied
--> src/main.rs:11:34
|
11 | let matches = App::new(NAME).about(description).get_matches();
| ^^^^^ the trait `std::convert::From<std::string::String>` is not implemented for `&str`
|
= note: required because of the requirements on the impl of `std::convert::Into<&str>` for `std::string::String`
如果我通过 &description
,我会得到类似的错误。我正在努力理解此错误的起源以及使用签名 pub fn about<S: Into<&'b str>>(self, about: S) -> Self
.
使用 Into<&str>
的给定(异常)约束,编译器无法将 String
或 &String
直接转换为请求的字符串切片。对于字符串切片,From<String>
和 From<&String>
都没有这样的实现。从拥有的字符串或类似字符串的值到切片的转换通常是通过其他特征完成的。
相反,您可以:
- 使用
String::as_str()
,它始终提供&str
; - 从
AsRef
特征调用as_ref()
,导致编译器为String
; 选择实现 - 或重新借用字符串,从而强制转换为
&str
。
AsRef<str>
let matches = App::new(NAME).about(description.as_str()).get_matches(); // (1)
let matches = App::new(NAME).about(description.as_ref()).get_matches(); // (2)
let matches = App::new(NAME).about(&*description).get_matches(); // (3)