在一行代码中从stdin读取一行到一个字符串

时间:2015-01-15 20:47:09

标签: rust

我知道我可以阅读一行并将其转换为一行中的数字,即

let lines: u32 = io::stdin().read_line().ok().unwrap().trim().parse().unwrap();

如何在不解析的情况下一行完成相同的操作?现在我这样做:

let line_u = io::stdin().read_line().ok().unwrap();
let line_t = line_u.as_slice().trim();

修改:说明这里发生了什么:

pub fn stdin() -> StdinReader
fn read_line(&mut self) -> IoResult<String> // method of StdinReader
type IoResult<T> = Result<T, IoError>;
fn ok(self) -> Option<T>                    // method of Result
fn unwrap(self) -> T                        // method of Option
fn trim(&self) -> &str                      // method of str from trait StrExt
fn to_string(?) -> String // I don't know where is this located in documentation

我们可以在String上使用trim,因为String是一个用指针解压缩的str,一个拥有的字符串。

parse()stdin()read_line()IoResultok()unwrap()trim()str

1 个答案:

答案 0 :(得分:2)

trim()会返回&str返回的String的{​​{1}}视图。您无法存储此对象,因为拥有unwrap()将不再存在于语句的末尾。因此,只需使用Stringto_string()转换回&str

String