繁体   English   中英

为什么`name = * name.trim();`给我`预期的结构`std :: string :: String`,找到str`?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM