[英]expected struct `std::string::String`, found struct `std::str::Split`
[英]Why does `name = *name.trim();` give me `expected struct `std::string::String`, found str`?
考虑以下示例(不构建):
use std::io::{self, Write};
fn main() {
io::stdout().write(b"Please enter your name: ");
io::stdout().flush();
let mut name = String::new();
io::stdin().read_line(&mut name);
name = *name.trim();
println!("Hello, {}!", name);
}
为什么会出现以下错误?
error[E0308]: mismatched types
--> src/main.rs:8:12
|
8 | name = *name.trim();
| ^^^^^^^^^^^^ expected struct `std::string::String`, found str
|
= note: expected type `std::string::String`
= note: found type `str`
让我们看一下str::trim()
的方法签名 :
fn trim(&self) -> &str
它返回&str
而不是String
! 为什么? 因为它不需要! 修剪是不需要分配新缓冲区的操作,因此不会导致拥有字符串。 &str
只是一个指针和一个长度...通过增加指针并减小长度,我们可以在字符串切片中看到另一个视图。 这就是修剪的全部功能。
因此,如果您真的想将修剪后的字符串转换为拥有的字符串,请说出name.trim().to_owned()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.